mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-10 17:24:29 +00:00
Don't disable call ICs with the callee frame still on the stack, bug 743088. r=luke
This commit is contained in:
parent
925676b3e1
commit
ca6235473e
@ -959,6 +959,8 @@ class CallCompiler : public BaseCompiler
|
|||||||
bool lowered = ic.frameSize.lowered(f.pc());
|
bool lowered = ic.frameSize.lowered(f.pc());
|
||||||
JS_ASSERT_IF(lowered, !callingNew);
|
JS_ASSERT_IF(lowered, !callingNew);
|
||||||
|
|
||||||
|
StackFrame *initialFp = f.fp();
|
||||||
|
|
||||||
stubs::UncachedCallResult ucr;
|
stubs::UncachedCallResult ucr;
|
||||||
if (callingNew)
|
if (callingNew)
|
||||||
stubs::UncachedNewHelper(f, ic.frameSize.staticArgc(), &ucr);
|
stubs::UncachedNewHelper(f, ic.frameSize.staticArgc(), &ucr);
|
||||||
@ -967,8 +969,9 @@ class CallCompiler : public BaseCompiler
|
|||||||
|
|
||||||
// Watch out in case the IC was invalidated by a recompilation on the calling
|
// Watch out in case the IC was invalidated by a recompilation on the calling
|
||||||
// script. This can happen either if the callee is executed or if it compiles
|
// script. This can happen either if the callee is executed or if it compiles
|
||||||
// and the compilation has a static overflow.
|
// and the compilation has a static overflow. Also watch for cases where
|
||||||
if (monitor.recompiled())
|
// an exception is thrown and the callee frame hasn't unwound yet.
|
||||||
|
if (monitor.recompiled() || f.fp() != initialFp)
|
||||||
return ucr.codeAddr;
|
return ucr.codeAddr;
|
||||||
|
|
||||||
// If the function cannot be jitted (generally unjittable or empty script),
|
// If the function cannot be jitted (generally unjittable or empty script),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user