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.

Change-Id: I4691b970f885ae60e1e2a27384c651dbba59feb7
Reviewed-on: https://go-review.googlesource.com/138635
Reviewed-by: Ian Lance Taylor <iant@golang.org>
diff --git a/go/types.cc b/go/types.cc
index cc07bfc..c410d7b 100644
--- a/go/types.cc
+++ b/go/types.cc
@@ -1125,6 +1125,8 @@
     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: