compiler: suppress type descriptor generation for aliases
authorIan Lance Taylor <ian@gcc.gnu.org>
Wed, 11 Sep 2019 14:25:52 +0000 (14:25 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Wed, 11 Sep 2019 14:25:52 +0000 (14:25 +0000)
    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

gcc/go/gofrontend/MERGE
gcc/go/gofrontend/gogo.cc

index 4ae93ee061ad9ad03552d9aeee3d91713379d296..8098eb047dae5d7849c2458a63dca7b00b03cfaf 100644 (file)
@@ -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.
index f6a8e7ad8eb16afb9442e6ef9956ab238739df36..3ff88cba1d24c55e7fad0955e99d77e2ba0fbc91 100644 (file)
@@ -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