summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/gc/bug-1490042.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/jit-test/tests/gc/bug-1490042.js')
-rw-r--r--js/src/jit-test/tests/gc/bug-1490042.js31
1 files changed, 31 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/gc/bug-1490042.js b/js/src/jit-test/tests/gc/bug-1490042.js
new file mode 100644
index 0000000000..b043f25486
--- /dev/null
+++ b/js/src/jit-test/tests/gc/bug-1490042.js
@@ -0,0 +1,31 @@
+// |jit-test| --no-ion; --no-baseline; --no-blinterp; skip-if: !('gcstate' in this && 'oomAfterAllocations' in this)
+
+gczeal(0);
+
+// Create a bunch of ObjectGroups with TypeNewScript attached.
+const count = 1000;
+let c = [];
+let a = [];
+for (let i = 0; i < count; i++) {
+ c[i] = function() { this.a = 1; this.b = 0; this.c = 2; };
+ a[i] = new c[i];
+}
+
+// Start an incremental GC and run until we're about to sweep objects.
+assertEq(gcstate(), "NotActive");
+gczeal(21);
+startgc(1);
+
+// Run incremental slices with simulated OOM set up to provoke OOM when sweeping
+// types.
+assertEq(gcstate(), "Sweep");
+gczeal(10);
+unsetgczeal(20);
+while (gcstate() == "Sweep") {
+ oomAfterAllocations(2);
+ gcslice(1);
+ resetOOMFailure();
+}
+
+// Ensure our type information stays alive.
+let x = c.length + a.length;