OSDN Git Service

Traverse erroneous function redefinitions.
authorian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 23 Feb 2011 04:57:01 +0000 (04:57 +0000)
committerian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 23 Feb 2011 04:57:01 +0000 (04:57 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@170428 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/go/gofrontend/gogo.cc

index 0be8c66..b062c54 100644 (file)
@@ -682,10 +682,15 @@ Gogo::start_function(const std::string& name, Function_type* type,
   else if (!type->is_method())
     {
       ret = this->package_->bindings()->add_function(*pname, NULL, function);
-      if (!ret->is_function())
+      if (!ret->is_function() || ret->func_value() != function)
        {
-         // Redefinition error.
-         ret = Named_object::make_function(name, NULL, function);
+         // Redefinition error.  Invent a name to avoid knockon
+         // errors.
+         static int redefinition_count;
+         char buf[30];
+         snprintf(buf, sizeof buf, ".$redefined%d", redefinition_count);
+         ++redefinition_count;
+         ret = this->package_->bindings()->add_function(buf, NULL, function);
        }
     }
   else