From: Ian Lance Taylor Date: Wed, 27 Feb 2019 01:41:25 +0000 (+0000) Subject: compiler: check recursive inherited interface aliases X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=6054700c46cfee76846678750972993d8447374c;p=gcc.git compiler: check recursive inherited interface aliases Fixes golang/go#25302. Reviewed-on: https://go-review.googlesource.com/c/163298 From-SVN: r269241 --- diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE index d601bb99cff..bb8a931451e 100644 --- a/gcc/go/gofrontend/MERGE +++ b/gcc/go/gofrontend/MERGE @@ -1,4 +1,4 @@ -9c1859b8e97242b0e697a3aaa39a4da5e6172e74 +2c74b84184941ebea318f69fe43a81f657790b63 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/types.cc b/gcc/go/gofrontend/types.cc index 9081af60bdd..82f9fb02b40 100644 --- a/gcc/go/gofrontend/types.cc +++ b/gcc/go/gofrontend/types.cc @@ -10329,6 +10329,23 @@ Find_alias::type(Type* type) return TRAVERSE_SKIP_COMPONENTS; } + // Check if there are recursive inherited interface aliases. + Interface_type* ift = type->interface_type(); + if (ift != NULL) + { + const Typed_identifier_list* methods = ift->local_methods(); + if (methods == NULL) + return TRAVERSE_CONTINUE; + for (Typed_identifier_list::const_iterator p = methods->begin(); + p != methods->end(); + ++p) + if (p->name().empty() && p->type()->named_type() == this->find_type_) + { + this->found_ = true; + return TRAVERSE_EXIT; + } + } + return TRAVERSE_CONTINUE; }