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:
parent
9d196169cc
commit
2c81daeeb5
@ -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.
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user