aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@gcc.gnu.org>2019-09-11 14:25:52 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2019-09-11 14:25:52 +0000
commita387d636cda7df27df2ad52c3947ef8d37f7aa46 (patch)
tree185c7265a52dd4e8bd4db98543e2f4c557aa5963 /gcc
parentdebae5232b81f4f0adcdc25ad8c8d2645a6ea376 (diff)
downloadgcc-a387d636cda7df27df2ad52c3947ef8d37f7aa46.zip
gcc-a387d636cda7df27df2ad52c3947ef8d37f7aa46.tar.gz
gcc-a387d636cda7df27df2ad52c3947ef8d37f7aa46.tar.bz2
compiler: suppress type descriptor generation for aliases
Change Named_object::get_backend to ignore aliases when creating type descriptors for types, to be consistent with Type::needs_specific_type_functions and the Specific_type_functions traversal class. For example, when compiling a package that creates an alias to an an externally defined type, e.g. import "foo" type MyFoo = foo.Foo it makes sense to skip the alias (not try to generate type specific functions for it) and let the normal mechanisms take care of the alias target, depending on whether the target is defined locally or defined elsewhere. Testcase for this problen can be found in CL 193261. Fixes golang/go#33866. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/191961 From-SVN: r275651
Diffstat (limited to 'gcc')
-rw-r--r--gcc/go/gofrontend/MERGE2
-rw-r--r--gcc/go/gofrontend/gogo.cc8
2 files changed, 8 insertions, 2 deletions
diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE
index 4ae93ee..8098eb0 100644
--- a/gcc/go/gofrontend/MERGE
+++ b/gcc/go/gofrontend/MERGE
@@ -1,4 +1,4 @@
-27b2311fa460b1dd76fb3a796c7c05ebedc64df2
+0950e905939f88c1421f8667ac4dc9e14528471c
The first line of this file holds the git revision number of the last
merge done from the gofrontend repository.
diff --git a/gcc/go/gofrontend/gogo.cc b/gcc/go/gofrontend/gogo.cc
index f6a8e7a..3ff88cb 100644
--- a/gcc/go/gofrontend/gogo.cc
+++ b/gcc/go/gofrontend/gogo.cc
@@ -8718,7 +8718,13 @@ Named_object::get_backend(Gogo* gogo, std::vector<Bexpression*>& const_decls,
case NAMED_OBJECT_TYPE:
{
Named_type* named_type = this->u_.type_value;
- if (!Gogo::is_erroneous_name(this->name_) && !named_type->is_alias())
+
+ // No need to do anything for aliases-- whatever has to be done
+ // can be done for the alias target.
+ if (named_type->is_alias())
+ break;
+
+ if (!Gogo::is_erroneous_name(this->name_))
type_decls.push_back(named_type->get_backend(gogo));
// We need to produce a type descriptor for every named