Commit 41112d95 by Ian Lance Taylor

compiler: add break label in 1,2-case select statement lowering

    
    CL 184998 added optimizations for one- and two-case select
    statements. But it didn't handle break statement in the select
    case correctly. Specifically, it didn't add the label definition,
    so it could result in a dangling goto. This CL fixes this, by
    adding the label definition.
    
    A test case is CL 185520.
    
    Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/185519

From-SVN: r273359
parent b59ff586
7a8e10be0ddb8909ce25a264d03b24cee4df60cc 170ecdf6b2eab8aac2b8c852fa95d3c36d6bf604
The first line of this file holds the git revision number of the last The first line of this file holds the git revision number of the last
merge done from the gofrontend repository. merge done from the gofrontend repository.
...@@ -5855,6 +5855,10 @@ Select_statement::lower_one_case(Block* b) ...@@ -5855,6 +5855,10 @@ Select_statement::lower_one_case(Block* b)
Statement::make_block_statement(scase.statements(), scase.location()); Statement::make_block_statement(scase.statements(), scase.location());
b->add_statement(bs); b->add_statement(bs);
Statement* label =
Statement::make_unnamed_label_statement(this->break_label());
b->add_statement(label);
this->is_lowered_ = true; this->is_lowered_ = true;
return Statement::make_block_statement(b, loc); return Statement::make_block_statement(b, loc);
} }
...@@ -5958,6 +5962,10 @@ Select_statement::lower_two_case(Block* b) ...@@ -5958,6 +5962,10 @@ Select_statement::lower_two_case(Block* b)
Statement::make_if_statement(call, bchan, defcase.statements(), loc); Statement::make_if_statement(call, bchan, defcase.statements(), loc);
b->add_statement(ifs); b->add_statement(ifs);
Statement* label =
Statement::make_unnamed_label_statement(this->break_label());
b->add_statement(label);
this->is_lowered_ = true; this->is_lowered_ = true;
return Statement::make_block_statement(b, loc); return Statement::make_block_statement(b, loc);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment