function foo() { | |
var result = 0; | |
for (var i = 0; i < arguments.length; ++i) | |
result += arguments[i]; | |
return result; | |
} | |
function bar() { | |
return foo.apply(this, arguments); | |
} | |
function baz(p) { | |
if (p) | |
return bar(1, 42); | |
return 0; | |
} | |
noInline(baz); | |
// Execute baz() once with p set, so that the call has a valid prediction. | |
baz(true); | |
// Warm up profiling in bar and foo. Convince this profiling that bar()'s varargs call will tend to | |
// pass a small number of arguments; | |
for (var i = 0; i < 1000; ++i) | |
bar(1); | |
// Now compile baz(), but don't run the bad code yet. | |
for (var i = 0; i < 10000; ++i) | |
baz(false); | |
// Finally, trigger the bug. | |
var result = baz(true); | |
if (result != 43) | |
throw "Error: bad result: " + result; |