function blah(args) { var array = []; for (var i = 0; i < args.length; ++i) array.push(args[i]); return array; } function foo() { // Force creation of arguments by doing out-of-bounds access. var tmp = arguments[42]; // Use the created arguments object. return blah(arguments); } function bar(array) { return foo.apply(this, array); } noInline(blah); noInline(bar); function checkEqual(a, b) { if (a.length != b.length) throw "Error: length mismatch: " + a + " versus " + b; for (var i = a.length; i--;) { if (a[i] != b[i]) throw "Error: mismatch at i = " + i + ": " + a + " versus " + b; } } function test(array) { var actual = bar(array); checkEqual(actual, array); } for (var i = 0; i < 10000; ++i) { var array = []; for (var j = 0; j < i % 6; ++j) array.push(j); test(array); }