aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@gcc.gnu.org>2019-02-01 15:00:46 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2019-02-01 15:00:46 +0000
commit284c00e2109c4170bd8fd6f5a6d5e2b3ba7a8d4f (patch)
treec4992f6dab5b24992aeeae1991ce0ef42a287d1f
parent577d65881ef0f90c790093a7e05cc28a14a45a26 (diff)
downloadgcc-284c00e2109c4170bd8fd6f5a6d5e2b3ba7a8d4f.zip
gcc-284c00e2109c4170bd8fd6f5a6d5e2b3ba7a8d4f.tar.gz
gcc-284c00e2109c4170bd8fd6f5a6d5e2b3ba7a8d4f.tar.bz2
compiler: support alias to pointer type as receiver in method declaration
Fixes golang/go#27994. Reviewed-on: https://go-review.googlesource.com/c/160459 From-SVN: r268450
-rw-r--r--gcc/go/gofrontend/MERGE2
-rw-r--r--gcc/go/gofrontend/gogo.cc8
2 files changed, 9 insertions, 1 deletions
diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE
index c9d68e1..b3f7c1b 100644
--- a/gcc/go/gofrontend/MERGE
+++ b/gcc/go/gofrontend/MERGE
@@ -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.
diff --git a/gcc/go/gofrontend/gogo.cc b/gcc/go/gofrontend/gogo.cc
index b03051c..6e1f1af 100644
--- a/gcc/go/gofrontend/gogo.cc
+++ b/gcc/go/gofrontend/gogo.cc
@@ -2096,12 +2096,20 @@ Gogo::declare_function(const std::string& name, Function_type* type,
// 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)