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)