This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

RE: [PATCH, PR60189, Cilk+] Fix for ICE with incorrect Cilk_sync usage


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
> 
> 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]