Index: src/hydrogen-instructions.cc |
diff --git a/src/hydrogen-instructions.cc b/src/hydrogen-instructions.cc |
index 880de29aca1eec220efa59a8e806600713fe237a..f8cb5ec5561bbacf82625c0c085a4ed2129cfa8b 100644 |
--- a/src/hydrogen-instructions.cc |
+++ b/src/hydrogen-instructions.cc |
@@ -3229,12 +3229,21 @@ void HAllocate::HandleSideEffectDominator(GVNFlag side_effect, |
HConstant::cast(dominator_size)->GetInteger32Constant(); |
int32_t current_size_constant = |
HConstant::cast(current_size)->GetInteger32Constant(); |
+ int32_t new_dominator_size = dominator_size_constant + current_size_constant; |
+ if (new_dominator_size > Page::kMaxNonCodeHeapObjectSize) { |
+ if (FLAG_trace_allocation_folding) { |
+ PrintF("#%d (%s) cannot fold into #%d (%s) due to size: %d\n", |
+ id(), Mnemonic(), dominator->id(), dominator->Mnemonic(), |
+ new_dominator_size); |
+ } |
+ return; |
+ } |
HBasicBlock* block = dominator->block(); |
Zone* zone = block->zone(); |
- HInstruction* new_dominator_size = new(zone) HConstant( |
- dominator_size_constant + current_size_constant); |
- new_dominator_size->InsertBefore(dominator_allocate_instr); |
- dominator_allocate_instr->UpdateSize(new_dominator_size); |
+ HInstruction* new_dominator_size_constant = new(zone) HConstant( |
+ new_dominator_size); |
+ new_dominator_size_constant->InsertBefore(dominator_allocate_instr); |
+ dominator_allocate_instr->UpdateSize(new_dominator_size_constant); |
#ifdef VERIFY_HEAP |
HInstruction* free_space_instr = |