From 601094e3f26554a57b80382b7c32afa196484663 Mon Sep 17 00:00:00 2001 From: Alexander Markov Date: Mon, 28 Jan 2019 22:29:17 +0000 Subject: [PATCH] [vm/bytecode] Fix max used block id when compiling from bytecode Fixes https://github.com/dart-lang/sdk/issues/35789 Change-Id: I061d8d5b709fa5469824c8f5d7490aa2038746a3 Reviewed-on: https://dart-review.googlesource.com/c/91440 Reviewed-by: Aart Bik Commit-Queue: Alexander Markov --- runtime/vm/compiler/backend/flow_graph_checker.cc | 6 ++---- runtime/vm/compiler/frontend/bytecode_flow_graph_builder.cc | 4 ++-- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/runtime/vm/compiler/backend/flow_graph_checker.cc b/runtime/vm/compiler/backend/flow_graph_checker.cc index 4ad6903d444..2e058448a01 100644 --- a/runtime/vm/compiler/backend/flow_graph_checker.cc +++ b/runtime/vm/compiler/backend/flow_graph_checker.cc @@ -60,13 +60,11 @@ void FlowGraphChecker::CheckBasicBlocks() { } // Iterate over all basic blocks. - // const intptr_t max_block_id = flow_graph_->max_block_id(); + const intptr_t max_block_id = flow_graph_->max_block_id(); for (BlockIterator block_it = flow_graph_->reverse_postorder_iterator(); !block_it.Done(); block_it.Advance()) { BlockEntryInstr* block = block_it.Current(); - // Re-enable this if possible - // https://github.com/dart-lang/sdk/issues/35789 - // ASSERT(block->block_id() <= max_block_id); + ASSERT(block->block_id() <= max_block_id); // Make sure ordering is consistent. ASSERT(block->preorder_number() <= block_count); ASSERT(block->postorder_number() <= block_count); diff --git a/runtime/vm/compiler/frontend/bytecode_flow_graph_builder.cc b/runtime/vm/compiler/frontend/bytecode_flow_graph_builder.cc index 71688da0c9d..8628e82d3d1 100644 --- a/runtime/vm/compiler/frontend/bytecode_flow_graph_builder.cc +++ b/runtime/vm/compiler/frontend/bytecode_flow_graph_builder.cc @@ -508,11 +508,11 @@ void BytecodeFlowGraphBuilder::BuildEntryOptional() { PrologueBuilder prologue_builder(parsed_function(), B->last_used_block_id_, B->IsCompiledForOsr(), B->IsInlining()); - B->last_used_block_id_ = prologue_builder.last_used_block_id(); - copy_args_prologue += prologue_builder.BuildOptionalParameterHandling( throw_no_such_method_, temp_var); + B->last_used_block_id_ = prologue_builder.last_used_block_id(); + JoinEntryInstr* prologue_exit = B->BuildJoinEntry(); copy_args_prologue += B->Goto(prologue_exit); copy_args_prologue.current = prologue_exit;