// This test verifies that we don't crash in FTL generated code due to lack of a store barrier // for a put-by-val when we don't know when the value was allocated. class MyNumber { constructor(v) { this._v = v; } plusOne() { return this._v + 1; } } noDFG(MyNumber.plusOne); let count = 0; let bogus = null; function bar() { count++; if (!(count % 100)) fullGC(); return new MyNumber(count); } noDFG(bar); noInline(bar); function foo(index, arg) { var result = [arg[0]]; if (arg.length > 1) result[1] = bar(); return result; } noInline(foo); function test() { for (let i = 0; i < 50000; i++) { let a = [1, i]; let x = foo(i, a); if (!(count % 100)) edenGC(); for (let j = 0; j < 100; j++) bogus = new MyNumber(-1); if ((count + 1) != x[1].plusOne()) throw("Wrong value for count"); } } test();