compiler: Fix names for hash/equality functions for unnamed types.

From-SVN: r183098
This commit is contained in:
Ian Lance Taylor 2012-01-11 16:28:08 +00:00
parent 58ef756802
commit 145f71b5ec
1 changed files with 11 additions and 1 deletions

View 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.