aboutsummaryrefslogtreecommitdiff
path: root/gcc/go
diff options
context:
space:
mode:
authorIan Lance Taylor <iant@google.com>2012-12-04 00:28:30 +0000
committerIan Lance Taylor <iant@google.com>2012-12-04 00:28:30 +0000
commitbada00095ab447246f17622eab0702360c7d3eee (patch)
tree7aab56d0949781e1d6418ddb66d3581e3bb2b396 /gcc/go
parent3d26fb35dc6e1bf233a52fffa57138a81ac68665 (diff)
compiler: Don't permit go/defer argument to be parenthesized.
Fixes Go repository issue 4468. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@194112 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/go')
-rw-r--r--gcc/go/gofrontend/parse.cc9
1 files changed, 6 insertions, 3 deletions
diff --git a/gcc/go/gofrontend/parse.cc b/gcc/go/gofrontend/parse.cc
index fe463c7d66f..c13f06b9495 100644
--- a/gcc/go/gofrontend/parse.cc
+++ b/gcc/go/gofrontend/parse.cc
@@ -4089,13 +4089,16 @@ Parse::go_or_defer_stat()
|| 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)
+ if (is_parenthesized || call_expr == NULL)
{
- error_at(expr_location, "expected call expression");
+ error_at(expr_location, "argument to go/defer must be function call");
return;
}