From: Ian Lance Taylor Date: Sun, 13 Oct 2013 04:15:20 +0000 (+0000) Subject: compiler: Fix handling of imported struct with embedded builtin type. X-Git-Tag: releases/gcc-4.9.0~3545 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6137391a4810dd1274acb8fb5bbd7ca081bd0e2b;p=thirdparty%2Fgcc.git compiler: Fix handling of imported struct with embedded builtin type. From-SVN: r203496 --- diff --git a/gcc/go/gofrontend/import.h b/gcc/go/gofrontend/import.h index c6844cda8a54..9917937e4d3b 100644 --- a/gcc/go/gofrontend/import.h +++ b/gcc/go/gofrontend/import.h @@ -149,6 +149,11 @@ class Import location() const { return this->location_; } + // Return the package we are importing. + Package* + package() const + { return this->package_; } + // Return the next character. int peek_char() diff --git a/gcc/go/gofrontend/types.cc b/gcc/go/gofrontend/types.cc index 69e3e99c1ff0..40b62f41bc0f 100644 --- a/gcc/go/gofrontend/types.cc +++ b/gcc/go/gofrontend/types.cc @@ -5258,6 +5258,19 @@ Struct_type::do_import(Import* imp) } Type* ftype = imp->read_type(); + // We don't pack the names of builtin types. In + // Struct_field::is_field_name we cope with a hack. Now we + // need another hack so that we don't accidentally think + // that an embedded builtin type is accessible from another + // package (we know that all the builtin types are not + // exported). + if (name.empty() && ftype->deref()->named_type() != NULL) + { + const std::string fn(ftype->deref()->named_type()->name()); + if (fn[0] >= 'a' && fn[0] <= 'z') + name = '.' + imp->package()->pkgpath() + '.' + fn; + } + Struct_field sf(Typed_identifier(name, ftype, imp->location())); if (imp->peek_char() == ' ')