function foo() {
// If the structure check hoister is overzealous, it will hoist the structure check of
// S3 up to the assignment of o, where the structure is actually S1. Doing so will cause
// this function to OSR exit every time.
var o = {}; // This will create an object with structure S1.
o.f = 42; // This will check for S1, and then transition to S2.
o.g = 43; // This will check for S2, and then transition to S3.
for (var i = 0; i < 5; ++i)
o.g++; // This will have a structure check on structure S3, which the structure check hoister will want to hoist.
return o;
}
var result = 0;
for (var i = 0; i < 100000; ++i)
result += foo().g;
if (result != 4800000)
throw ("Error: bad result: " + result);