]> git.saurik.com Git - apple/javascriptcore.git/blobdiff - tests/stress/function-sinking-put.js
JavaScriptCore-7601.1.46.3.tar.gz
[apple/javascriptcore.git] / tests / stress / function-sinking-put.js
diff --git a/tests/stress/function-sinking-put.js b/tests/stress/function-sinking-put.js
new file mode 100644 (file)
index 0000000..deb9e6f
--- /dev/null
@@ -0,0 +1,28 @@
+function sink (p, q) {
+    var g = function(x) { return x; };
+    if (p) { if (q) g.inner = 42; return g; }
+    return function(x) { return x; };
+}
+noInline(sink);
+
+for (var i = 0; i < 10000; ++i) {
+    var f = sink(true, true);
+    var result = f(42);
+    if (result != 42)
+    throw "Error: expected 42 but got " + result;
+}
+
+// At this point, the function should be compiled down to the FTL
+
+// Test the allocation on the implicit inner else branch
+var f = sink(true, false);
+var result = f(12);
+if (result != 12)
+    // This shouldn't matter as it should be either correct or completely crash
+    throw "Error: expected 12 but got " + result;
+
+// Check that the allocation did not sink beyond the property assignment
+var f = sink(true, true);
+var result = f.inner;
+if (result != 42)
+    throw "Error: inner should be 42 but is " + result;