summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/gc/bug-1643913.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/jit-test/tests/gc/bug-1643913.js')
-rw-r--r--js/src/jit-test/tests/gc/bug-1643913.js36
1 files changed, 36 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/gc/bug-1643913.js b/js/src/jit-test/tests/gc/bug-1643913.js
new file mode 100644
index 0000000000..1f83a9a0a3
--- /dev/null
+++ b/js/src/jit-test/tests/gc/bug-1643913.js
@@ -0,0 +1,36 @@
+gczeal(0);
+
+for (let p of [false, true]) {
+ f(p);
+
+ // Run an incremental GC to completion.
+ startgc(1);
+ while (gcstate() !== 'NotActive') {
+ gcslice(10000, { dontStart: true });
+ }
+}
+
+function ccwToObject() {
+ return evalcx('({})', newGlobal({newCompartment: true}));
+}
+
+function ccwToRegistry() {
+ return evalcx('new FinalizationRegistry(value => {})',
+ newGlobal({newCompartment: true}));
+}
+
+function f(p) {
+ let registry = ccwToRegistry();
+ let target = ccwToObject();
+ registry.register(target, undefined);
+
+ // Add a CCW from registry to target zone or vice versa to control
+ // the order the zones are swept in.
+ if (p) {
+ registry.ptr = target;
+ } else {
+ target.ptr = registry;
+ }
+
+ gc();
+}