compiler: Fix names for hash/equality functions for unnamed types.
authorIan Lance Taylor <ian@gcc.gnu.org>
Wed, 11 Jan 2012 16:28:08 +0000 (16:28 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Wed, 11 Jan 2012 16:28:08 +0000 (16:28 +0000)
From-SVN: r183098

gcc/go/gofrontend/types.cc

index d93b68bfc109939ccab76b6a903ce0f97f8a2d16..21dac51b3708c58c9b3de9c425ce5e87a0535055 100644 (file)
@@ -1504,7 +1504,17 @@ Type::specific_type_functions(Gogo* gogo, Named_type* name,
 
   std::string base_name;
   if (name == NULL)
-    base_name = gogo->pack_hidden_name(this->mangled_name(gogo), false);
+    {
+      // Mangled names can have '.' if they happen to refer to named
+      // types in some way.  That's fine if this is simply a named
+      // type, but otherwise it will confuse the code that builds
+      // function identifiers.  Remove '.' when necessary.
+      base_name = this->mangled_name(gogo);
+      size_t i;
+      while ((i = base_name.find('.')) != std::string::npos)
+       base_name[i] = '$';
+      base_name = gogo->pack_hidden_name(base_name, false);
+    }
   else
     {
       // This name is already hidden or not as appropriate.