diff --git a/js/src/jit-test/tests/basic/bug678211.js b/js/src/jit-test/tests/basic/bug678211.js new file mode 100644 index 00000000000..61b5f5d197c --- /dev/null +++ b/js/src/jit-test/tests/basic/bug678211.js @@ -0,0 +1,3 @@ +var g = newGlobal('new-compartment'); +g.eval("function f(n) { for (var i = 0; i < n; i++) f(0); }"); +g.f(RUNLOOP + 1); diff --git a/js/src/jstracer.cpp b/js/src/jstracer.cpp index 071baa17ca8..49d3a2e6973 100644 --- a/js/src/jstracer.cpp +++ b/js/src/jstracer.cpp @@ -10467,7 +10467,10 @@ TraceRecorder::record_EnterFrame() /* Try inlining one level in case this recursion doesn't go too deep. */ if (fp->script() == fp->prev()->script() && - fp->prev()->prev() && fp->prev()->prev()->script() == fp->script()) { + fp->prev()->prev() && + fp->prev()->prev()->isScriptFrame() && + fp->prev()->prev()->script() == fp->script()) + { RETURN_STOP_A("recursion started inlining"); }