// Copyright 2020 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: --stress-compaction --expose-gc // Test that the dirty FinalizationRegistries that are enqueued during GC have // their slots correctly recorded by the GC. // 1) Create many JSFinalizationRegistry objects so that they span several pages // (page size is 256kb). let registries = []; for (let i = 0; i < 1024 * 8; i++) { registries.push(new FinalizationRegistry(() => {})); } // 2) Force two GCs to ensure that JSFinalizatonRegistry objects are tenured. gc(); gc(); // 3) In a function: create a dummy target and register it in all // JSFinalizatonRegistry objects. (function() { let garbage = {}; registries.forEach((fr) => { fr.register(garbage, 42); }); garbage = null; })(); // 4) Outside the function where the target is unreachable: force GC to collect // the object. gc(); // 5) Force another GC to test that the slot was correctly updated. gc();