]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR c++/60189 (ICE with invalid use of _Cilk_sync)
authorIgor Zamyatin <igor.zamyatin@intel.com>
Wed, 21 May 2014 08:03:06 +0000 (08:03 +0000)
committerKirill Yukhin <kyukhin@gcc.gnu.org>
Wed, 21 May 2014 08:03:06 +0000 (08:03 +0000)
gcc/cp
PR c/60189
* parser.c (cp_parser_postfix_expression): Move handling of cilk_sync
from here to...
(cp_parser_statement): ...here. Make sure only semicolon can go after
Cilk_sync.

gcc/testsuite
PR c++/60189
* c-c++-common/cilk-plus/CK/invalid_sync.cÑ: New test.

From-SVN: r210678

gcc/cp/ChangeLog
gcc/cp/parser.c
gcc/testsuite/ChangeLog
gcc/testsuite/c-c++-common/cilk-plus/CK/invalid_sync.cc [new file with mode: 0644]

index fb0d335c9251d0417859e5e528db2d99f58220ce..790b87e009067b804029514af9274d07ea7a2aea 100644 (file)
@@ -1,3 +1,11 @@
+2014-05-21  Igor Zamyatin  <igor.zamyatin@intel.com>
+
+       PR c/60189
+       * parser.c (cp_parser_postfix_expression): Move handling of cilk_sync
+       from here to...
+       (cp_parser_statement): ...here. Make sure only semicolon can go after
+       Cilk_sync.
+
 2014-05-20  Paolo Carlini  <paolo.carlini@oracle.com>
 
        PR c++/58753
index d6bb51815c968428af5a39c88038f50770993558..7f06106f4ca5d33c4ef13dfe7721774ebfc17894 100644 (file)
@@ -5845,20 +5845,6 @@ 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;
 
     case RID_BUILTIN_SHUFFLE:
       {
@@ -9414,6 +9400,24 @@ cp_parser_statement (cp_parser* parser, tree in_statement_expr,
          statement = cp_parser_jump_statement (parser);
          break;
 
+       case RID_CILK_SYNC:
+         cp_lexer_consume_token (parser->lexer);
+         if (flag_cilkplus)
+           {
+             tree sync_expr = build_cilk_sync ();
+             SET_EXPR_LOCATION (sync_expr,
+                                token->location);
+             statement = finish_expr_stmt (sync_expr);
+           }
+         else
+           {
+             error_at (token->location, "-fcilkplus must be enabled to use"
+                       " %<_Cilk_sync%>");
+             statement = error_mark_node;
+           }
+         cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
+         break;
+
          /* Objective-C++ exception-handling constructs.  */
        case RID_AT_TRY:
        case RID_AT_CATCH:
index 117c65f7701750a47f14c09fdd28989550899450..a5d155c6e6fd2c5dfbaa82a50c83fd01cd39cf07 100644 (file)
@@ -1,3 +1,8 @@
+2014-05-21  Igor Zamyatin  <igor.zamyatin@intel.com>
+
+       PR c++/60189
+       * c-c++-common/cilk-plus/CK/invalid_sync.cÑ: New test.
+
 2014-05-20  Jan Hubicka  <hubicka@ucw.cz>
 
        PR tree-optimization/60899
diff --git a/gcc/testsuite/c-c++-common/cilk-plus/CK/invalid_sync.cc b/gcc/testsuite/c-c++-common/cilk-plus/CK/invalid_sync.cc
new file mode 100644 (file)
index 0000000..cf1caf1
--- /dev/null
@@ -0,0 +1,9 @@
+/* PR c/60189 */
+/* { dg-do compile } */
+/* { dg-options "-fcilkplus" } */
+
+int main (void)
+{
+    _Cilk_sync return; /* { dg-error " expected ';' before 'return'" } */
+    return 0;
+}