Index: test/webkit/dfg-cse-cfa-discrepancy.js |
diff --git a/test/webkit/concat-while-having-a-bad-time.js b/test/webkit/dfg-cse-cfa-discrepancy.js |
similarity index 65% |
copy from test/webkit/concat-while-having-a-bad-time.js |
copy to test/webkit/dfg-cse-cfa-discrepancy.js |
index dfda1e08a0b36194b787a44ee12a9693acd8aeaf..a40e7e693122cad600b1faed8970734714b73930 100644 |
--- a/test/webkit/concat-while-having-a-bad-time.js |
+++ b/test/webkit/dfg-cse-cfa-discrepancy.js |
@@ -22,10 +22,33 @@ |
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
description( |
-"Tests the behavior of Array.prototype.concat while the array is having a bad time due to one of the elements we are concatenating." |
+"Tests stability when the CFA finds a constant in block-local data flow over captured variables but the CSE doesn't because of differences in heap modeling." |
); |
-Object.defineProperty(Array.prototype, 0, { writable: false }); |
-shouldBe("[42].concat()", "[42]"); |
+function foo(a, b) { |
+ var x = a + b; |
+ var y = a - b; |
+ function bar() { |
+ var m = x + y; |
+ var n = x - y; |
+ function baz() { |
+ return m + n; |
+ } |
+ m = 23; |
+ if (m < n) { |
+ m = 12; |
+ y = 72; // PutScopedVar appears to clobber world in CSE but only clobbers structures in CFA. |
+ return m + 6 + n + baz(); |
+ } else |
+ return 91; |
+ } |
+ x = 42; |
+ if (y < 0) { |
+ return x + 5 + y + bar(); |
+ } else |
+ return 73; |
+} |
+for (var i = 0; i < 200; ++i) |
+ shouldBe("foo(i, i + 1)", "162"); |