blob: 548a2d401e922163f55b1563c4bc1fbdc0545a7d [file] [log] [blame]
// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// This test attempts to verify that the slow path for late static and
// instance field initialization appropriately restores the write barrier
// invariant.
import 'dart:_internal';
class Box {
var field;
}
late var global = (() {
VMInternalsForTesting.collectAllGarbage();
return 10;
})();
@pragma('vm:never-inline')
foo() {
final kTrue = int.parse('1') == 1;
final box = Box(); // Ensure this box is allocated new
if (kTrue) {
global; // Will not block write-barrier elimination (GC in here should restore invariants)
box.field = Box()..field = 42; // Runtime should've made `box` remembered.
VMInternalsForTesting.collectAllGarbage();
}
return box;
}
main() {
if (foo().field.field != 42) throw 'a';
}