Commit ada24741 by Ian Lance Taylor

compiler: Don't record interface types with blank type names.

Fixes issue 8079.

From-SVN: r216343
parent f6e31dff
......@@ -245,7 +245,7 @@ Parse::type()
|| token->is_op(OPERATOR_CHANOP))
return this->channel_type();
else if (token->is_keyword(KEYWORD_INTERFACE))
return this->interface_type();
return this->interface_type(true);
else if (token->is_keyword(KEYWORD_FUNC))
{
Location location = token->location();
......@@ -1179,7 +1179,7 @@ Parse::block()
// MethodSpecList = MethodSpec { ";" MethodSpec } [ ";" ] .
Type*
Parse::interface_type()
Parse::interface_type(bool record)
{
go_assert(this->peek_token()->is_keyword(KEYWORD_INTERFACE));
Location location = this->location();
......@@ -1227,6 +1227,7 @@ Parse::interface_type()
}
Interface_type* ret = Type::make_interface_type(methods, location);
if (record)
this->gogo_->record_interface_type(ret);
return ret;
}
......@@ -1526,7 +1527,13 @@ Parse::type_spec(void*)
}
Type* type;
if (!this->peek_token()->is_op(OPERATOR_SEMICOLON))
if (name == "_" && this->peek_token()->is_keyword(KEYWORD_INTERFACE))
{
// We call Parse::interface_type explicity here because we do not want
// to record an interface with a blank type name.
type = this->interface_type(false);
}
else if (!this->peek_token()->is_op(OPERATOR_SEMICOLON))
type = this->type();
else
{
......
......@@ -182,7 +182,7 @@ class Parse
void parameter_decl(bool, Typed_identifier_list*, bool*, bool*, bool*);
bool result(Typed_identifier_list**);
Location block();
Type* interface_type();
Type* interface_type(bool record);
void method_spec(Typed_identifier_list*);
void declaration();
bool declaration_may_start_here();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment