40 lines
1.6 KiB
JavaScript
40 lines
1.6 KiB
JavaScript
description(
|
|
"This test checks for a specific regression that caused function calls to allocate too many temporary registers."
|
|
);
|
|
|
|
var message = "PASS: Recursion did not run out of stack space."
|
|
try {
|
|
// Call a function recursively.
|
|
(function f(g, x) {
|
|
if (x > 3000)
|
|
return;
|
|
|
|
// Do lots of function calls -- when the bug was present, each
|
|
// of these calls would allocate a new temporary register. We can
|
|
// detect profligate register allocation because it will substantially
|
|
// curtail our recursion limit.
|
|
g(); g(); g(); g(); g(); g(); g(); g(); g(); g();
|
|
g(); g(); g(); g(); g(); g(); g(); g(); g(); g();
|
|
g(); g(); g(); g(); g(); g(); g(); g(); g(); g();
|
|
g(); g(); g(); g(); g(); g(); g(); g(); g(); g();
|
|
g(); g(); g(); g(); g(); g(); g(); g(); g(); g();
|
|
g(); g(); g(); g(); g(); g(); g(); g(); g(); g();
|
|
g(); g(); g(); g(); g(); g(); g(); g(); g(); g();
|
|
g(); g(); g(); g(); g(); g(); g(); g(); g(); g();
|
|
g(); g(); g(); g(); g(); g(); g(); g(); g(); g();
|
|
g(); g(); g(); g(); g(); g(); g(); g(); g(); g();
|
|
g(); g(); g(); g(); g(); g(); g(); g(); g(); g();
|
|
g(); g(); g(); g(); g(); g(); g(); g(); g(); g();
|
|
g(); g(); g(); g(); g(); g(); g(); g(); g(); g();
|
|
g(); g(); g(); g(); g(); g(); g(); g(); g(); g();
|
|
g(); g(); g(); g(); g(); g(); g(); g(); g(); g();
|
|
g(); g(); g(); g(); g(); g(); g(); g(); g(); g();
|
|
|
|
f(g, ++x);
|
|
})(function() {}, 0);
|
|
} catch(e) {
|
|
message = "FAIL: Recursion threw an exception: " + e;
|
|
}
|
|
|
|
debug(message);
|