Commit 33cdac3b by Ian Lance Taylor

compiler: permit empty statements after fallthrough

    
    The language spec permits empty statements after a fallthrough
    statement, so implement that.  Also give a better error message when a
    fallthrough statement is in the wrong place.  The test case for this
    is in the master repository, test/fixedbugs/issue14540.go, just not
    yet in the gccgo repository.
    
    Fixes golang/go#14538
    
    Reviewed-on: https://go-review.googlesource.com/91855

From-SVN: r257378
parent 964c809f
5031f878a761bf83f5f96710d62f83e2dc5ecf04 d9f33a479f8012f7495d197e4b7417cba4d477fa
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.
...@@ -4667,11 +4667,26 @@ Parse::expr_case_clause(Case_clauses* clauses, bool* saw_default) ...@@ -4667,11 +4667,26 @@ Parse::expr_case_clause(Case_clauses* clauses, bool* saw_default)
{ {
Location fallthrough_loc = this->location(); Location fallthrough_loc = this->location();
is_fallthrough = true; is_fallthrough = true;
if (this->advance_token()->is_op(OPERATOR_SEMICOLON)) while (this->advance_token()->is_op(OPERATOR_SEMICOLON))
this->advance_token(); ;
if (this->peek_token()->is_op(OPERATOR_RCURLY)) if (this->peek_token()->is_op(OPERATOR_RCURLY))
go_error_at(fallthrough_loc, go_error_at(fallthrough_loc,
_("cannot fallthrough final case in switch")); _("cannot fallthrough final case in switch"));
else if (!this->peek_token()->is_keyword(KEYWORD_CASE)
&& !this->peek_token()->is_keyword(KEYWORD_DEFAULT))
{
go_error_at(fallthrough_loc, "fallthrough statement out of place");
while (!this->peek_token()->is_keyword(KEYWORD_CASE)
&& !this->peek_token()->is_keyword(KEYWORD_DEFAULT)
&& !this->peek_token()->is_op(OPERATOR_RCURLY)
&& !this->peek_token()->is_eof())
{
if (this->statement_may_start_here())
this->statement_list();
else
this->advance_token();
}
}
} }
if (is_default) if (is_default)
......
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