Index: src/hydrogen.cc |
diff --git a/src/hydrogen.cc b/src/hydrogen.cc |
index 4e00ba6907fd60f59e25f0570c812b6727ad30ec..2d51b9b463941f072c2fc7f92b331eee66e80080 100644 |
--- a/src/hydrogen.cc |
+++ b/src/hydrogen.cc |
@@ -4711,7 +4711,7 @@ void HOptimizedGraphBuilder::HandlePolymorphicLoadNamedField( |
set_current_block(if_true); |
HInstruction* load = BuildLoadMonomorphic( |
- &info, object, compare, ast_id, return_id, false); |
+ &info, object, compare, ast_id, return_id, FLAG_polymorphic_inlining); |
if (load == NULL) { |
if (HasStackOverflow()) return; |
} else { |
@@ -4731,6 +4731,10 @@ void HOptimizedGraphBuilder::HandlePolymorphicLoadNamedField( |
// know about and do not want to handle ones we've never seen. Otherwise |
// use a generic IC. |
if (count == types->length() && FLAG_deoptimize_uncommon_cases) { |
+ // Because the deopt may be the only path in the polymorphic load, make sure |
+ // that the environment stack matches the depth on deopt that it otherwise |
+ // would have had after a successful load. |
+ if (!ast_context()->IsEffect()) Push(graph()->GetConstant0()); |
FinishExitWithHardDeoptimization("Unknown map in polymorphic load", join); |
} else { |
HValue* context = environment()->context(); |