diff --git a/src/arm/lithium-arm.cc b/src/arm/lithium-arm.cc index 10c66624b7..c088986355 100644 --- a/src/arm/lithium-arm.cc +++ b/src/arm/lithium-arm.cc @@ -2122,6 +2122,7 @@ LInstruction* LChunkBuilder::DoUnknownOSRValue(HUnknownOSRValue* instr) { int spill_index = chunk()->GetNextSpillIndex(false); // Not double-width. if (spill_index > LUnallocated::kMaxFixedIndex) { Abort("Too many spill slots needed for OSR"); + spill_index = 0; } return DefineAsSpilled(new LUnknownOSRValue, spill_index); } diff --git a/src/compiler.cc b/src/compiler.cc index c753d0491b..f8d1b3de6b 100755 --- a/src/compiler.cc +++ b/src/compiler.cc @@ -217,7 +217,8 @@ static bool MakeCrankshaftCode(CompilationInfo* info) { const int locals_limit = LUnallocated::kMaxFixedIndex; Scope* scope = info->scope(); if ((scope->num_parameters() + 1) > parameter_limit || - scope->num_stack_slots() > locals_limit) { + (info->osr_ast_id() != AstNode::kNoNumber && + scope->num_parameters() + 1 + scope->num_stack_slots() > locals_limit)) { info->AbortOptimization(); Handle closure = info->closure(); info->shared_info()->DisableOptimization(*closure); diff --git a/src/ia32/lithium-ia32.cc b/src/ia32/lithium-ia32.cc index 19415975e2..20c13fdd45 100644 --- a/src/ia32/lithium-ia32.cc +++ b/src/ia32/lithium-ia32.cc @@ -2170,6 +2170,7 @@ LInstruction* LChunkBuilder::DoUnknownOSRValue(HUnknownOSRValue* instr) { int spill_index = chunk()->GetNextSpillIndex(false); // Not double-width. if (spill_index > LUnallocated::kMaxFixedIndex) { Abort("Too many spill slots needed for OSR"); + spill_index = 0; } return DefineAsSpilled(new LUnknownOSRValue, spill_index); } diff --git a/src/x64/lithium-x64.cc b/src/x64/lithium-x64.cc index 1571d62b25..f1a1da70ba 100644 --- a/src/x64/lithium-x64.cc +++ b/src/x64/lithium-x64.cc @@ -2114,6 +2114,7 @@ LInstruction* LChunkBuilder::DoUnknownOSRValue(HUnknownOSRValue* instr) { int spill_index = chunk()->GetNextSpillIndex(false); // Not double-width. if (spill_index > LUnallocated::kMaxFixedIndex) { Abort("Too many spill slots needed for OSR"); + spill_index = 0; } return DefineAsSpilled(new LUnknownOSRValue, spill_index); }