diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2015-03-13 20:48:15 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2015-03-13 20:48:15 +0000 |
commit | cbf259c4479b91b84ca9de8b963d388788d79717 (patch) | |
tree | f58d30493a0c45f5d5a8e789aff8701ffa5f6ca8 /gcc/go/gofrontend/parse.cc | |
parent | f41914c3852c0a44a436be7ffa779853ee4ac18e (diff) | |
download | gcc-cbf259c4479b91b84ca9de8b963d388788d79717.zip gcc-cbf259c4479b91b84ca9de8b963d388788d79717.tar.gz gcc-cbf259c4479b91b84ca9de8b963d388788d79717.tar.bz2 |
compiler: Permit label on fallthrough statement.
Test case: https://go-review.googlesource.com/7523 .
From-SVN: r221428
Diffstat (limited to 'gcc/go/gofrontend/parse.cc')
-rw-r--r-- | gcc/go/gofrontend/parse.cc | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/gcc/go/gofrontend/parse.cc b/gcc/go/gofrontend/parse.cc index 496ab41..970e6bd 100644 --- a/gcc/go/gofrontend/parse.cc +++ b/gcc/go/gofrontend/parse.cc @@ -3735,6 +3735,17 @@ Parse::labeled_stmt(const std::string& label_name, Location location) if (!this->statement_may_start_here()) { + if (this->peek_token()->is_keyword(KEYWORD_FALLTHROUGH)) + { + // We don't treat the fallthrough keyword as a statement, + // because it can't appear most places where a statement is + // permitted, but it may have a label. We introduce a + // semicolon because the caller expects to see a statement. + this->unget_token(Token::make_operator_token(OPERATOR_SEMICOLON, + location)); + return; + } + // Mark the label as used to avoid a useless error about an // unused label. if (label != NULL) |