On Wed, Jan 30, 2019 at 7:57 AM Ian Lance Taylor <i...@golang.org> wrote:
>
> This patch by Ben Shi to the Go frontend fixes it to support an
> aliases to a pointer type as a method receiver.  This fixes
> https://golang.org/issue/28252.  Bootstrapped and ran Go testsuite on
> x86_64-pc-linux-gnu.  Committed to mainline.

This patch, also by Ben Shi, extends the same idea to a method
declaration.  This fixes https://golang.org/issue/27994.  Bootstrapped
and ran Go testsuite on x86_64-pc-linux-gnu.  Committed to mainline.

Ian
Index: gcc/go/gofrontend/MERGE
===================================================================
--- gcc/go/gofrontend/MERGE     (revision 268397)
+++ gcc/go/gofrontend/MERGE     (working copy)
@@ -1,4 +1,4 @@
-2206f40fc1e0e1e2ba3eacb7388dd26b72729bde
+cbcc538adc5177778da5788d1101e16f106a1514
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
Index: gcc/go/gofrontend/gogo.cc
===================================================================
--- gcc/go/gofrontend/gogo.cc   (revision 268397)
+++ gcc/go/gofrontend/gogo.cc   (working copy)
@@ -2096,12 +2096,20 @@ Gogo::declare_function(const std::string
       // declarations.
       Type* rtype = type->receiver()->type();
 
+      while (rtype->named_type() != NULL
+         && rtype->named_type()->is_alias())
+       rtype = rtype->named_type()->real_type()->forwarded();
+
       // We want to look through the pointer created by the
       // parser, without getting an error if the type is not yet
       // defined.
       if (rtype->classification() == Type::TYPE_POINTER)
        rtype = rtype->points_to();
 
+      while (rtype->named_type() != NULL
+         && rtype->named_type()->is_alias())
+       rtype = rtype->named_type()->real_type()->forwarded();
+
       if (rtype->is_error_type())
        return NULL;
       else if (rtype->named_type() != NULL)

Reply via email to