The Go language spec does not permit go or defer calls to be parenthesized, but gccgo was permitting it. This patch issues an error for that case. Bootstrapped and ran Go testsuite on x86_64-unknown-linux-gnu. Committed to mainline.
Ian
diff -r 4427b2edf858 go/parse.cc --- a/go/parse.cc Sun Dec 02 23:20:02 2012 -0800 +++ b/go/parse.cc Mon Dec 03 16:26:16 2012 -0800 @@ -4089,13 +4089,16 @@ || this->peek_token()->is_keyword(KEYWORD_DEFER)); bool is_go = this->peek_token()->is_keyword(KEYWORD_GO); Location stat_location = this->location(); - this->advance_token(); + + const Token* token = this->advance_token(); Location expr_location = this->location(); + bool is_parenthesized = token->is_op(OPERATOR_LPAREN); + Expression* expr = this->expression(PRECEDENCE_NORMAL, false, true, NULL); Call_expression* call_expr = expr->call_expression(); - if (call_expr == NULL) - { - error_at(expr_location, "expected call expression"); + if (is_parenthesized || call_expr == NULL) + { + error_at(expr_location, "argument to go/defer must be function call"); return; }