@@ -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;
+ {
+ 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;
+ }
case RID_BUILTIN_SHUFFLE:
{
new file mode 100644
@@ -0,0 +1,9 @@
+/* PR c/60189 */
+/* { dg-do compile } */
+/* { dg-options "-fcilkplus" } */
+
+int main (void)
+{
+ _Cilk_sync return; /* { dg-error " '_Cilk_sync' must be followed by semicolon" } */
+ return 0;
+}