From: Ian Lance Taylor Date: Wed, 11 Jan 2012 16:28:08 +0000 (+0000) Subject: compiler: Fix names for hash/equality functions for unnamed types. X-Git-Tag: releases/gcc-4.7.0~1049 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=145f71b5ecfaf5efca5689f0fa84b78a7c5c70be;p=thirdparty%2Fgcc.git compiler: Fix names for hash/equality functions for unnamed types. From-SVN: r183098 --- diff --git a/gcc/go/gofrontend/types.cc b/gcc/go/gofrontend/types.cc index d93b68bfc109..21dac51b3708 100644 --- a/gcc/go/gofrontend/types.cc +++ b/gcc/go/gofrontend/types.cc @@ -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.