| Index: runtime/vm/kernel_to_il.cc
|
| diff --git a/runtime/vm/kernel_to_il.cc b/runtime/vm/kernel_to_il.cc
|
| index ff7c1cde292c282a4af6a08576dd4a3990a73205..dedb3fd533b564ece324959071bae95ba21bde9c 100644
|
| --- a/runtime/vm/kernel_to_il.cc
|
| +++ b/runtime/vm/kernel_to_il.cc
|
| @@ -4916,7 +4916,8 @@ void FlowGraphBuilder::VisitBlock(Block* node) {
|
|
|
| instructions += EnterScope(node);
|
| List<Statement>& statements = node->statements();
|
| - for (intptr_t i = 0; i < statements.length(); ++i) {
|
| + for (intptr_t i = 0; (i < statements.length()) && instructions.is_open();
|
| + ++i) {
|
| instructions += TranslateStatement(statements[i]);
|
| }
|
| instructions += ExitScope(node);
|
| @@ -4931,17 +4932,19 @@ void FlowGraphBuilder::VisitReturnStatement(ReturnStatement* node) {
|
| Fragment instructions = node->expression() == NULL
|
| ? NullConstant()
|
| : TranslateExpression(node->expression());
|
| - if (inside_try_finally) {
|
| - ASSERT(scopes_->finally_return_variable != NULL);
|
| - instructions += StoreLocal(scopes_->finally_return_variable);
|
| - instructions += Drop();
|
| - instructions += TranslateFinallyFinalizers(NULL, -1);
|
| - if (instructions.is_open()) {
|
| - instructions += LoadLocal(scopes_->finally_return_variable);
|
| + if (instructions.is_open()) {
|
| + if (inside_try_finally) {
|
| + ASSERT(scopes_->finally_return_variable != NULL);
|
| + instructions += StoreLocal(scopes_->finally_return_variable);
|
| + instructions += Drop();
|
| + instructions += TranslateFinallyFinalizers(NULL, -1);
|
| + if (instructions.is_open()) {
|
| + instructions += LoadLocal(scopes_->finally_return_variable);
|
| + instructions += Return();
|
| + }
|
| + } else {
|
| instructions += Return();
|
| }
|
| - } else {
|
| - instructions += Return();
|
| }
|
| fragment_ = instructions;
|
| }
|
|
|