blob: 7830a54418e9377907eb8d43a696db1a6bf057cc [file] [log] [blame]
description(
"Regression test for https://webkit.org/b/141111. This test should run without crashing."
);
function MyObject(v) {
this.v = v;
}
function foo(o, a, b, c) {
// Don't do anything real but have some control flow. This causes the PutLocals for a,
// b, and c to survive into SSA form. But we don't have any effects, so sinking will be
// successful.
if (o.v)
return o;
else
return z;
}
function bar(o, y) {
var a = y;
var b = y + 1;
var c = y + 2;
var d = y + 3;
var e = y + 4;
var f = y + 5;
var g = y + 6;
var h = y + 7;
var i = y + 8;
var j = y + 9;
var k = y + 10;
var result = function(p, q) {
var x = new MyObject(a + b + c + d + e + f + g + h + i + j + k);
if (q) {
// Make it appear that it's possible to clobber those closure variables, so that we
// load from them again down below.
a = b = c = d = e = f = g = h = i = j = k = 42;
}
if (p)
x = foo(o, 1, 2, 3)
else
x = five;
return x.v + a + b + c + d + e + f + g + h + i + j + k;
};
noInline(result);
return result;
}
var o = new MyObject(42);
var z = new MyObject(0);
var five = new MyObject(5);
for (var i = 0; i < 100000; ++i) {
var result = bar(o, i)(true, false);
if (result != 42 + 11 * i + 55)
throw "Error: bad result: " + result;
}