compiler: use the underlying type to build placeholder type for alias

When asking for a placeholder type of an alias type, build a
    placeholder for the underlying type, instead of treating the
    alias as a named type and calling get_backend. The latter may
    fail as we may not be ready to build a complete backend type. We
    have already used a unified backend type for alias type and its
    underlying type. Do the same for placeholders as well.
    
    Reviewed-on: https://go-review.googlesource.com/138635

From-SVN: r264773
This commit is contained in:
Ian Lance Taylor 2018-10-01 22:25:52 +00:00
parent 44ef03008c
commit b1d88684bb
2 changed files with 3 additions and 1 deletions

View file

@ -1,4 +1,4 @@
2f56d51c6b3104242613c74b02fa6c63a2fe16c5 53d0d7ca278a5612fcdb5fb098e7bf950a0178ef
The first line of this file holds the git revision number of the last The first line of this file holds the git revision number of the last
merge done from the gofrontend repository. merge done from the gofrontend repository.

View file

@ -1125,6 +1125,8 @@ Type::get_backend_placeholder(Gogo* gogo)
case TYPE_FORWARD: case TYPE_FORWARD:
// Named types keep track of their own dependencies and manage // Named types keep track of their own dependencies and manage
// their own placeholders. // their own placeholders.
if (this->named_type() != NULL && this->named_type()->is_alias())
return this->unalias()->get_backend_placeholder(gogo);
return this->get_backend(gogo); return this->get_backend(gogo);
case TYPE_INTERFACE: case TYPE_INTERFACE: