compiler: check recursive inherited interface aliases

Fixes golang/go#25302.
    
    Reviewed-on: https://go-review.googlesource.com/c/163298

From-SVN: r269241
This commit is contained in:
Ian Lance Taylor 2019-02-27 01:41:25 +00:00
parent 15994bfbca
commit 6054700c46
2 changed files with 18 additions and 1 deletions

View file

@ -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.

View file

@ -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;
}