On Thu, Apr 10, 2014 at 02:23:16PM +0000, Zamyatin, Igor wrote:
> 2014-04-10 Igor Zamyatin <[email protected]>
>
> PR c++/60189
> * parser.c (cp_parser_postfix_expression): Make sure only
> semicolon can go after Cilk_sync.
>
> gcc/testsuite/ChangeLog:
>
> 2014-04-10 Igor Zamyatin <[email protected]>
>
> PR c++/60189
> * c-c++-common/cilk-plus/CK/invalid_sync.cс: New test.
CCing Jason as this is a C++ FE change.
> --- a/gcc/cp/parser.c
> +++ b/gcc/cp/parser.c
> @@ -5835,20 +5835,33 @@ cp_parser_postfix_expression (cp_parser *parser, bool
> address_p, bool cast_p,
> }
> break;
> }
> -
> +
> case RID_CILK_SYNC:
> - if (flag_cilkplus)
> - {
> - tree sync_expr = build_cilk_sync ();
> - SET_EXPR_LOCATION (sync_expr,
> - cp_lexer_peek_token (parser->lexer)->location);
> - finish_expr_stmt (sync_expr);
> - }
> - else
> - error_at (token->location, "-fcilkplus must be enabled to use"
> - " %<_Cilk_sync%>");
> - cp_lexer_consume_token (parser->lexer);
> - break;
> + {
I don't see the point of adding the extra {} around the whole case,
there is no varaible declared at that point.
Other than that it looks good to me, but I'll defer the review to Jason.
> + cp_lexer_consume_token (parser->lexer);
> + if (flag_cilkplus)
> + {
> + token = cp_lexer_peek_token (parser->lexer);
> + if (token->type != CPP_SEMICOLON)
> + {
> + error_at (token->location, "%<_Cilk_sync%> must be followed"
> + " by semicolon");
> + postfix_expression = error_mark_node;
> + break;
> + }
> + tree sync_expr = build_cilk_sync ();
> + SET_EXPR_LOCATION (sync_expr,
> + cp_lexer_peek_token (parser->lexer)->location);
> + finish_expr_stmt (sync_expr);
> + }
> + else
> + {
> + error_at (token->location, "-fcilkplus must be enabled to use"
> + " %<_Cilk_sync%>");
> + postfix_expression = error_mark_node;
> + }
> + break;
> + }
Jakub