From: Ian Lance Taylor Date: Fri, 15 Sep 2017 21:25:17 +0000 (+0000) Subject: compiler: call error_statement for fallthrough in last case X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=7fdaa1f0b873b79ee87ad910b0da8e4c5f194cb0;p=gcc.git compiler: call error_statement for fallthrough in last case It is possible to do this check in backend, by walking the block and check whether the last statement is a goto. But it seems easier to do it in the frontend, where it can simply use is_fallthrough. Reviewed-on: https://go-review.googlesource.com/63690 From-SVN: r252851 --- diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE index a63d921ab57..aafc5269095 100644 --- a/gcc/go/gofrontend/MERGE +++ b/gcc/go/gofrontend/MERGE @@ -1,4 +1,4 @@ -de7b370901c4fc6852eaa7372282bb699429ec4a +70cf67704699c8bcaf6f52437812367cdc4ad169 The first line of this file holds the git revision number of the last merge done from the gofrontend repository. diff --git a/gcc/go/gofrontend/statements.cc b/gcc/go/gofrontend/statements.cc index eb370f84481..bea57cd6836 100644 --- a/gcc/go/gofrontend/statements.cc +++ b/gcc/go/gofrontend/statements.cc @@ -3707,6 +3707,12 @@ Case_clauses::get_backend(Translate_context* context, std::vector cases; Bstatement* stat = p->get_backend(context, break_label, &case_constants, &cases); + // The final clause can't fall through. + if (i == c - 1 && p->is_fallthrough()) + { + go_assert(saw_errors()); + stat = context->backend()->error_statement(); + } (*all_cases)[i].swap(cases); (*all_statements)[i] = stat; }