This patch to the Go frontend gives a better error message when the same variable is declared multiple times on the left hand side of a := statement.
Was assign.go:59:28: error: multiple assignments to x Now assign.go:59:28: error: ‘x’ repeated on left side of := Bootstrapped and ran Go testsuite on x86_64-pc-linux-gnu. Committed to mainline. Ian
3e1ee797694007edb621061b1034262297fe767d diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE index c14ee7e7b14..59648326fcc 100644 --- a/gcc/go/gofrontend/MERGE +++ b/gcc/go/gofrontend/MERGE @@ -1,4 +1,4 @@ -8cbe18aff99dbf79bd1adb9c025418e84505ffd5 +66669bb6cae475eda6666a94f6ff4f616ffa77d7 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/parse.cc b/gcc/go/gofrontend/parse.cc index ef5941522cf..aa157e86cb2 100644 --- a/gcc/go/gofrontend/parse.cc +++ b/gcc/go/gofrontend/parse.cc @@ -2165,8 +2165,12 @@ Parse::simple_var_decl_or_assignment(const std::string& name, id = this->gogo_->pack_hidden_name(id, is_id_exported); ins = uniq_idents.insert(id); if (!ins.second && !Gogo::is_sink_name(id)) - go_error_at(id_location, "multiple assignments to %s", - Gogo::message_name(id).c_str()); + { + // Use %s to print := to avoid -Wformat-diag warning. + go_error_at(id_location, + "%qs repeated on left side of %s", + Gogo::message_name(id).c_str(), ":="); + } til.push_back(Typed_identifier(id, NULL, location)); } else @@ -2219,7 +2223,11 @@ Parse::simple_var_decl_or_assignment(const std::string& name, const Token* token = this->advance_token(); if (!dup_name.empty()) - go_error_at(dup_loc, "multiple assignments to %s", dup_name.c_str()); + { + // Use %s to print := to avoid -Wformat-diag warning. + go_error_at(dup_loc, "%qs repeated on left side of %s", + dup_name.c_str(), ":="); + } if (p_range_clause != NULL && token->is_keyword(KEYWORD_RANGE)) {