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() ...@@ -245,7 +245,7 @@ Parse::type()
|| token->is_op(OPERATOR_CHANOP)) || token->is_op(OPERATOR_CHANOP))
return this->channel_type(); return this->channel_type();
else if (token->is_keyword(KEYWORD_INTERFACE)) else if (token->is_keyword(KEYWORD_INTERFACE))
return this->interface_type(); return this->interface_type(true);
else if (token->is_keyword(KEYWORD_FUNC)) else if (token->is_keyword(KEYWORD_FUNC))
{ {
Location location = token->location(); Location location = token->location();
...@@ -1179,7 +1179,7 @@ Parse::block() ...@@ -1179,7 +1179,7 @@ Parse::block()
// MethodSpecList = MethodSpec { ";" MethodSpec } [ ";" ] . // MethodSpecList = MethodSpec { ";" MethodSpec } [ ";" ] .
Type* Type*
Parse::interface_type() Parse::interface_type(bool record)
{ {
go_assert(this->peek_token()->is_keyword(KEYWORD_INTERFACE)); go_assert(this->peek_token()->is_keyword(KEYWORD_INTERFACE));
Location location = this->location(); Location location = this->location();
...@@ -1227,7 +1227,8 @@ Parse::interface_type() ...@@ -1227,7 +1227,8 @@ Parse::interface_type()
} }
Interface_type* ret = Type::make_interface_type(methods, location); Interface_type* ret = Type::make_interface_type(methods, location);
this->gogo_->record_interface_type(ret); if (record)
this->gogo_->record_interface_type(ret);
return ret; return ret;
} }
...@@ -1526,7 +1527,13 @@ Parse::type_spec(void*) ...@@ -1526,7 +1527,13 @@ Parse::type_spec(void*)
} }
Type* type; 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(); type = this->type();
else else
{ {
......
...@@ -182,7 +182,7 @@ class Parse ...@@ -182,7 +182,7 @@ class Parse
void parameter_decl(bool, Typed_identifier_list*, bool*, bool*, bool*); void parameter_decl(bool, Typed_identifier_list*, bool*, bool*, bool*);
bool result(Typed_identifier_list**); bool result(Typed_identifier_list**);
Location block(); Location block();
Type* interface_type(); Type* interface_type(bool record);
void method_spec(Typed_identifier_list*); void method_spec(Typed_identifier_list*);
void declaration(); void declaration();
bool declaration_may_start_here(); 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