| Index: runtime/vm/flow_graph_builder.cc
|
| diff --git a/runtime/vm/flow_graph_builder.cc b/runtime/vm/flow_graph_builder.cc
|
| index b4b833ad9bd9c7a97ad7bfd6a73fe396d64403c2..ec4247a162ceddd48a43282d5ec23ab8dfdaf2af 100644
|
| --- a/runtime/vm/flow_graph_builder.cc
|
| +++ b/runtime/vm/flow_graph_builder.cc
|
| @@ -96,6 +96,15 @@ void InlineExitCollector::AddExit(ReturnInstr* exit) {
|
| }
|
|
|
|
|
| +void InlineExitCollector::Union(const InlineExitCollector* other) {
|
| + // It doesn't make sense to combine different calls or calls from
|
| + // different graphs.
|
| + ASSERT(caller_graph_ == other->caller_graph_);
|
| + ASSERT(call_ == other->call_);
|
| + exits_.AddArray(other->exits_);
|
| +}
|
| +
|
| +
|
| int InlineExitCollector::LowestBlockIdFirst(const Data* a, const Data* b) {
|
| return (a->exit_block->block_id() - b->exit_block->block_id());
|
| }
|
| @@ -132,7 +141,7 @@ Definition* InlineExitCollector::JoinReturns(BlockEntryInstr** exit_block,
|
| caller_graph_->set_max_block_id(join_id);
|
| JoinEntryInstr* join =
|
| new JoinEntryInstr(join_id, CatchClauseNode::kInvalidTryIndex);
|
| - join->InheritDeoptTarget(call_);
|
| + join->InheritDeoptTargetAfter(call_);
|
|
|
| // The dominator set of the join is the intersection of the dominator
|
| // sets of all the predecessors. If we keep the dominator sets ordered
|
| @@ -179,7 +188,8 @@ Definition* InlineExitCollector::JoinReturns(BlockEntryInstr** exit_block,
|
| // We either exhausted the dominators for this block before
|
| // exhausting the current intersection, or else we found a block
|
| // on the path from the root of the tree that is not in common.
|
| - ASSERT(j >= 2);
|
| + // I.e., there cannot be an empty set of dominators.
|
| + ASSERT(j > 0);
|
| join_dominators.TruncateTo(j);
|
| break;
|
| }
|
|
|