diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2019-02-01 15:00:46 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2019-02-01 15:00:46 +0000 |
commit | 284c00e2109c4170bd8fd6f5a6d5e2b3ba7a8d4f (patch) | |
tree | c4992f6dab5b24992aeeae1991ce0ef42a287d1f | |
parent | 577d65881ef0f90c790093a7e05cc28a14a45a26 (diff) | |
download | gcc-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/MERGE | 2 | ||||
-rw-r--r-- | gcc/go/gofrontend/gogo.cc | 8 |
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) |