compiler: use the underlying type to build placeholder type for alias
authorIan Lance Taylor <ian@gcc.gnu.org>
Mon, 1 Oct 2018 22:25:52 +0000 (22:25 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Mon, 1 Oct 2018 22:25:52 +0000 (22:25 +0000)
    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

gcc/go/gofrontend/MERGE
gcc/go/gofrontend/types.cc

index 6ad214689fb7bafee33a0a812b86ae79c4cf845d..ad3253f4b85b4003dc20d648e8c0ffbad4bef573 100644 (file)
@@ -1,4 +1,4 @@
-2f56d51c6b3104242613c74b02fa6c63a2fe16c5
+53d0d7ca278a5612fcdb5fb098e7bf950a0178ef
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
index ad0704cc2da0ccafb59f8980b8e014e4c3c3d940..3768719a03ac3599de0743c34ce05bfa97e782ca 100644 (file)
@@ -1125,6 +1125,8 @@ Type::get_backend_placeholder(Gogo* gogo)
     case TYPE_FORWARD:
       // Named types keep track of their own dependencies and manage
       // 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);
 
     case TYPE_INTERFACE: