51 lines
740 B
JavaScript
51 lines
740 B
JavaScript
// #0
|
|
// o = {}
|
|
// o2 = {}
|
|
// jump #1
|
|
//
|
|
// #1
|
|
// o.f = o2
|
|
// effects()
|
|
// x = o.f
|
|
// escape(o)
|
|
// branch #2, #1
|
|
//
|
|
// #2
|
|
// x cannot be o2 here, it has to be TOP
|
|
|
|
let count = 0;
|
|
function bool() {
|
|
++count;
|
|
return !!(count % 2);
|
|
}
|
|
noInline(bool);
|
|
|
|
let o;
|
|
function effects() { if (!o) return; o.f = 42; }
|
|
noInline(effects);
|
|
|
|
function escape(theO) { o = theO; }
|
|
noInline(escape);
|
|
|
|
function bar() {
|
|
let o = {};
|
|
let o2 = {};
|
|
let p;
|
|
for (let i = 0; i < 10; ++i) {
|
|
o.f = o2;
|
|
effects();
|
|
let x = o.f;
|
|
escape(o);
|
|
if (bool())
|
|
continue;
|
|
p = x;
|
|
}
|
|
return p;
|
|
}
|
|
noInline(bar);
|
|
|
|
for (let i = 0; i < 10000; ++i) {
|
|
if (bar() !== 42)
|
|
throw new Error;
|
|
}
|