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))
     {

Reply via email to