aboutsummaryrefslogtreecommitdiff
path: root/gcc/go/gofrontend/parse.cc
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@gcc.gnu.org>2015-03-13 20:48:15 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2015-03-13 20:48:15 +0000
commitcbf259c4479b91b84ca9de8b963d388788d79717 (patch)
treef58d30493a0c45f5d5a8e789aff8701ffa5f6ca8 /gcc/go/gofrontend/parse.cc
parentf41914c3852c0a44a436be7ffa779853ee4ac18e (diff)
downloadgcc-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.cc11
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)