X-Git-Url: https://git.saurik.com/apple/javascriptcore.git/blobdiff_plain/2d39b0e377c0896910ee49ae70082ba665faf986..ed1e77d3adeb83d26fd1dfb16dd84cabdcefd250:/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 index 0000000..deb9e6f --- /dev/null +++ b/tests/stress/function-sinking-put.js @@ -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;