compiler: build a single backend type for type alias

A type alias and its underlying type are identical. Build a
    single backend type for them. Previously we build two backend
    types, which sometimes confuse the backend's type system.
    
    Also don't include type aliases into the list of named type
    declarations, since they are not named types.
    
    Reviewed-on: https://go-review.googlesource.com/123362

From-SVN: r262572
This commit is contained in:
Ian Lance Taylor 2018-07-12 04:18:48 +00:00
parent 9d196169cc
commit 2c81daeeb5
3 changed files with 7 additions and 2 deletions

View File

@ -1,4 +1,4 @@
ea7ac7784791dca517b6681a02c39c11bf136755
267686fd1dffbc03e610e9f17dadb4e72c75f18d
The first line of this file holds the git revision number of the last
merge done from the gofrontend repository.

View File

@ -7604,7 +7604,7 @@ Named_object::get_backend(Gogo* gogo, std::vector<Bexpression*>& const_decls,
case NAMED_OBJECT_TYPE:
{
Named_type* named_type = this->u_.type_value;
if (!Gogo::is_erroneous_name(this->name_))
if (!Gogo::is_erroneous_name(this->name_) && !named_type->is_alias())
type_decls.push_back(named_type->get_backend(gogo));
// We need to produce a type descriptor for every named

View File

@ -991,6 +991,11 @@ Type::get_backend(Gogo* gogo)
if (this->btype_ != NULL)
return this->btype_;
if (this->named_type() != NULL && this->named_type()->is_alias()) {
this->btype_ = this->unalias()->get_backend(gogo);
return this->btype_;
}
if (this->forward_declaration_type() != NULL
|| this->named_type() != NULL)
return this->get_btype_without_hash(gogo);