Go patch committed: report unused vars initialized to function literals

Ian Lance Taylor iant@golang.org
Fri Aug 28 01:43:00 GMT 2015


This patch by Chris Manghane fixes an oversight in the Go compiler
that caused it to fail to report unused variables initialized to
function literals.  This fixes https://golang.org/issue/12317 .
Bootstrapped and ran Go testsuite on x86_64-unknown-linux-gnu.
Committed to mainline.

Ian
-------------- next part --------------
Index: gcc/go/gofrontend/MERGE
===================================================================
--- gcc/go/gofrontend/MERGE	(revision 227284)
+++ gcc/go/gofrontend/MERGE	(working copy)
@@ -1,4 +1,4 @@
-9ae5835a010a55fba875103be5f4e61485a97099
+3aa2ea272e475010da8b480fc3095d0cd7254d12
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
Index: gcc/go/gofrontend/gogo.cc
===================================================================
--- gcc/go/gofrontend/gogo.cc	(revision 227276)
+++ gcc/go/gofrontend/gogo.cc	(working copy)
@@ -3156,6 +3156,7 @@ Check_types_traverse::variable(Named_obj
 	    error_at(var->location(),
 		     "incompatible type in initialization (%s)",
 		     reason.c_str());
+          init = Expression::make_error(named_object->location());
 	  var->clear_init();
 	}
       else if (init != NULL
@@ -3180,13 +3181,13 @@ Check_types_traverse::variable(Named_obj
                        no->message_name().c_str());
             }
         }
-      else if (!var->is_used()
-	       && !var->is_global()
-	       && !var->is_parameter()
-	       && !var->is_receiver()
-	       && !var->type()->is_error()
-	       && (init == NULL || !init->is_error_expression())
-	       && !Lex::is_invalid_identifier(named_object->name()))
+      if (!var->is_used()
+          && !var->is_global()
+          && !var->is_parameter()
+          && !var->is_receiver()
+          && !var->type()->is_error()
+          && (init == NULL || !init->is_error_expression())
+          && !Lex::is_invalid_identifier(named_object->name()))
 	error_at(var->location(), "%qs declared and not used",
 		 named_object->message_name().c_str());
     }


More information about the Gcc-patches mailing list