// Copyright 2018 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Flags: --expose-gc

const f = eval(`(function f(i) {
  if (i == 0) {
    class Derived extends Object {
      constructor() {
        super();
        ${"this.a=1;".repeat(0x3fffe-8)}
      }
    }
    return Derived;
  }

  class DerivedN extends f(i-1) {
    constructor() {
      super();
      ${"this.a=1;".repeat(0x40000-8)}
    }
  }

  return DerivedN;
})`);

let a = new (f(0x7ff))();
a.a = 1;
gc();
assertEquals(1, a.a);
