This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
RE: [PATCH, PR60189, Cilk+] Fix for ICE with incorrect Cilk_sync usage
- From: "Zamyatin, Igor" <igor dot zamyatin at intel dot com>
- To: "GCC Patches (gcc-patches at gcc dot gnu dot org)" <gcc-patches at gcc dot gnu dot org>
- Cc: "Iyer, Balaji V" <balaji dot v dot iyer at intel dot com>, "Jakub Jelinek (jakub at redhat dot com)" <jakub at redhat dot com>
- Date: Thu, 10 Apr 2014 14:23:16 +0000
- Subject: RE: [PATCH, PR60189, Cilk+] Fix for ICE with incorrect Cilk_sync usage
- Authentication-results: sourceware.org; auth=none
- References: <0EFAB2BDD0F67E4FB6CCC8B9F87D7569429DBFEF at IRSMSX103 dot ger dot corp dot intel dot com>
Resending with correct Changelog
Is it OK?
Thanks,
Igor
gcc/cp/ChangeLog:
2014-04-10 Igor Zamyatin <igor.zamyatin@intel.com>
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 <igor.zamyatin@intel.com>
PR c++/60189
* c-c++-common/cilk-plus/CK/invalid_sync.cс: New test.
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index 7bea3d2..95f9c93 100644
--- 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;
+ {
+ 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:
{
diff --git a/gcc/testsuite/c-c++-common/cilk-plus/CK/invalid_sync.сc b/gcc/testsuite/c-c++-common/cilk-plus/CK/invalid_sync.cс
new file mode 100644
index 0000000..e7bec68
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/cilk-plus/CK/invalid_sync.cс
@@ -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;
+}
> -----Original Message-----
> From: gcc-patches-owner@gcc.gnu.org [mailto:gcc-patches-
> owner@gcc.gnu.org] On Behalf Of Zamyatin, Igor
> Sent: Thursday, April 10, 2014 5:56 PM
> To: GCC Patches (gcc-patches@gcc.gnu.org)
> Cc: Iyer, Balaji V; Jakub Jelinek (jakub@redhat.com)
> Subject: [PATCH, PR60189, Cilk+] Fix for ICE with incorrect Cilk_sync usage
>
> Hi!
>
> This fixes ICE on inappropriate usage of Cilk_sync keyword.
>
> Bootstrapped/regtested on x86_64. Ok for trunk?
>
>
> Thanks,
> Igor
>
>