From 145f71b5ecfaf5efca5689f0fa84b78a7c5c70be Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Wed, 11 Jan 2012 16:28:08 +0000 Subject: [PATCH] compiler: Fix names for hash/equality functions for unnamed types. From-SVN: r183098 --- gcc/go/gofrontend/types.cc | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/gcc/go/gofrontend/types.cc b/gcc/go/gofrontend/types.cc index d93b68bfc10..21dac51b370 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.