Commit 7fdaa1f0 by Ian Lance Taylor

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
parent 026a79f7
de7b370901c4fc6852eaa7372282bb699429ec4a 70cf67704699c8bcaf6f52437812367cdc4ad169
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.
...@@ -3707,6 +3707,12 @@ Case_clauses::get_backend(Translate_context* context, ...@@ -3707,6 +3707,12 @@ Case_clauses::get_backend(Translate_context* context,
std::vector<Bexpression*> cases; std::vector<Bexpression*> cases;
Bstatement* stat = p->get_backend(context, break_label, &case_constants, Bstatement* stat = p->get_backend(context, break_label, &case_constants,
&cases); &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_cases)[i].swap(cases);
(*all_statements)[i] = stat; (*all_statements)[i] = stat;
} }
......
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