compiler: Report unused variables initialized to function literals.
authorIan Lance Taylor <ian@gcc.gnu.org>
Thu, 27 Aug 2015 23:09:37 +0000 (23:09 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Thu, 27 Aug 2015 23:09:37 +0000 (23:09 +0000)
    Fixes golang/go#12317.

    Reviewed-on: https://go-review.googlesource.com/13908

From-SVN: r227285

gcc/go/gofrontend/MERGE
gcc/go/gofrontend/gogo.cc

index dc519b28402ca4c4dada511ff86da598d36639fe..beb095a5557a0777de916ee4cda575a5c5b320b5 100644 (file)
@@ -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 ea9104fc3c3b9db9c2a53bac2ce1a7dada3a4e63..233ee274cf0e0c726d8696a698f298f1eaaa0d41 100644 (file)
@@ -3156,6 +3156,7 @@ Check_types_traverse::variable(Named_object* named_object)
            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_object* named_object)
                        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());
     }