aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp/parser.c
diff options
context:
space:
mode:
authorIain Sandoe <iain@sandoe.co.uk>2020-10-30 19:24:07 +0000
committerIain Sandoe <iain@sandoe.co.uk>2020-11-01 20:15:25 +0000
commite344ea07e4024316e1bc01f18bf7f187ad3aef89 (patch)
treed406d6eba79c5e13d509cc6c638e1b3e71ea088c /gcc/cp/parser.c
parent3784f161a383ead7d5fe9a5b68e4d07eccd82d49 (diff)
downloadgcc-e344ea07e4024316e1bc01f18bf7f187ad3aef89.zip
gcc-e344ea07e4024316e1bc01f18bf7f187ad3aef89.tar.gz
gcc-e344ea07e4024316e1bc01f18bf7f187ad3aef89.tar.bz2
Objective-C++ : Address a FIXME.
We can avoid the spurious additional complaint about a closing ')' by short-circuiting the test in the case we know there's a syntax error already reported. gcc/cp/ChangeLog: * parser.c (cp_parser_objc_at_property_declaration): Use any exisiting syntax error to suppress complaints about a missing closing parenthesis in parsing property attributes. gcc/testsuite/ChangeLog: * obj-c++.dg/property/at-property-1.mm: Adjust test after fixing spurious error output.
Diffstat (limited to 'gcc/cp/parser.c')
-rw-r--r--gcc/cp/parser.c13
1 files changed, 4 insertions, 9 deletions
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index bd8c241..dd8c4b5 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -33884,16 +33884,17 @@ cp_parser_objc_at_property_declaration (cp_parser *parser)
/* Eat the '('. */
matching_parens parens;
parens.consume_open (parser);
+ bool syntax_error = false;
while (true)
{
- bool syntax_error = false;
cp_token *token = cp_lexer_peek_token (parser->lexer);
enum rid keyword;
if (token->type != CPP_NAME)
{
cp_parser_error (parser, "expected identifier");
+ syntax_error = true;
break;
}
keyword = C_RID_CODE (token->u.value);
@@ -33967,17 +33968,11 @@ cp_parser_objc_at_property_declaration (cp_parser *parser)
break;
}
- /* FIXME: "@property (setter, assign);" will generate a spurious
- "error: expected ‘)’ before ‘,’ token". This is because
- cp_parser_require, unlike the C counterpart, will produce an
- error even if we are in error recovery. */
- if (!parens.require_close (parser))
- {
- cp_parser_skip_to_closing_parenthesis (parser,
+ if (syntax_error || !parens.require_close (parser))
+ cp_parser_skip_to_closing_parenthesis (parser,
/*recovering=*/true,
/*or_comma=*/false,
/*consume_paren=*/true);
- }
}
/* ... and the property declaration(s). */