test262/implementation-contributed/javascriptcore/stress/ftl-try-catch-oom-error-lazy-slow-path.js
test262-automation e9a5a7f918 [javascriptcore-test262-automation] changes from git@github.com:WebKit/webkit.git at sha 949e26452cfa153a7f4afe593da97e2fe9e1b706 on Tue Jul 03 2018 14:35:15 GMT-0400 (Eastern Daylight Time) (#1620)
* [javascriptcore-test262-automation] changes from git@github.com:WebKit/webkit.git at sha 949e26452cfa153a7f4afe593da97e2fe9e1b706 on Tue Jul 03 2018 14:35:15 GMT-0400 (Eastern Daylight Time)
2018-07-03 15:59:58 -04:00

70 lines
1.3 KiB
JavaScript

forceGCSlowPaths(); // Force OOM error in FTL MakeRope to happen in a lazy slow path.
function assert(b) {
if (!b)
throw new Error("Bad assertion");
}
function a() { return "a"; }
noInline(a);
function b() { return "b"; }
noInline(b);
function c() { return "c"; }
noInline(c);
function d() { return "d"; }
noInline(d);
function e() { return "e"; }
noInline(e);
function f() { return "f"; }
noInline(f);
function g() { return "g"; }
noInline(g);
let expString = "a";
let exponentialBlowup = false;
let shouldBreak = false;
function foo(fun, left, right) {
let x = fun();
let r = left + right;
var _a = a();
var _b = b();
var _c = c();
var _d = d();
var _e = e();
var _f = f();
var _g = g();
try {
expString = expString + expString;
} catch(e) {
shouldBreak = true;
assert(_b === "b");
assert(_c === "c");
assert(_d === "d");
assert(_e === "e");
assert(_f === "f");
assert(_g === "g");
}
return x + r;
}
noInline(foo);
function blah() { return "blah"; }
noInline(blah);
for (let i = 0; i < 100000; i++) {
assert(foo(blah, "b", "a") === "blahba");
if (!exponentialBlowup)
expString = "a";
}
exponentialBlowup = true;
while (true) {
assert(foo(blah, "a", "b") === "blahab");
if (shouldBreak)
break;
}