35 lines
848 B
JavaScript
35 lines
848 B
JavaScript
description(
|
|
"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."
|
|
);
|
|
|
|
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;
|
|
}
|
|
|
|
silentTestPass = true;
|
|
noInline(foo);
|
|
|
|
for (var i = 0; i < 200; i = dfgIncrement({f:foo, i:i + 1, n:100}))
|
|
shouldBe("foo(i, i + 1)", "162");
|
|
|