c-parser.c (c_parser_omp_atomic): Allow seq_cst before atomic-clause...
authorJakub Jelinek <jakub@redhat.com>
Thu, 24 Apr 2014 21:20:28 +0000 (23:20 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Thu, 24 Apr 2014 21:20:28 +0000 (23:20 +0200)
gcc/c/
* c-parser.c (c_parser_omp_atomic): Allow seq_cst before
atomic-clause, allow comma in between atomic-clause and
seq_cst.
gcc/cp/
* parser.c (cp_parser_omp_atomic): Allow seq_cst before
atomic-clause, allow comma in between atomic-clause and
seq_cst.
gcc/testsuite/
* c-c++-common/gomp/atomic-16.c: Remove all dg-error directives.
Replace load with read and store with write.
libgomp/
* testsuite/libgomp.c++/atomic-14.C: Allow seq_cst and
atomic type clauses in any order and optional comma in between.
* testsuite/libgomp.c++/atomic-15.C: Likewise.
* testsuite/libgomp.c/atomic-17.c: Likewise.

From-SVN: r209762

gcc/c/ChangeLog
gcc/c/c-parser.c
gcc/cp/ChangeLog
gcc/cp/parser.c
gcc/testsuite/ChangeLog
gcc/testsuite/c-c++-common/gomp/atomic-16.c
libgomp/ChangeLog
libgomp/testsuite/libgomp.c++/atomic-14.C
libgomp/testsuite/libgomp.c++/atomic-15.C
libgomp/testsuite/libgomp.c/atomic-17.c

index 2d182f3..3ee2594 100644 (file)
@@ -1,3 +1,9 @@
+2014-04-24  Jakub Jelinek  <jakub@redhat.com>
+
+       * c-parser.c (c_parser_omp_atomic): Allow seq_cst before
+       atomic-clause, allow comma in between atomic-clause and
+       seq_cst.
+
 2014-04-22  Jakub Jelinek  <jakub@redhat.com>
 
        PR c/59073
index 0deab84..6eb235c 100644 (file)
@@ -11198,6 +11198,18 @@ c_parser_omp_atomic (location_t loc, c_parser *parser)
   if (c_parser_next_token_is (parser, CPP_NAME))
     {
       const char *p = IDENTIFIER_POINTER (c_parser_peek_token (parser)->value);
+      if (!strcmp (p, "seq_cst"))
+       {
+         seq_cst = true;
+         c_parser_consume_token (parser);
+         if (c_parser_next_token_is (parser, CPP_COMMA)
+             && c_parser_peek_2nd_token (parser)->type == CPP_NAME)
+           c_parser_consume_token (parser);
+       }
+    }
+  if (c_parser_next_token_is (parser, CPP_NAME))
+    {
+      const char *p = IDENTIFIER_POINTER (c_parser_peek_token (parser)->value);
 
       if (!strcmp (p, "read"))
        code = OMP_ATOMIC_READ;
@@ -11212,13 +11224,21 @@ c_parser_omp_atomic (location_t loc, c_parser *parser)
       if (p)
        c_parser_consume_token (parser);
     }
-  if (c_parser_next_token_is (parser, CPP_NAME))
+  if (!seq_cst)
     {
-      const char *p = IDENTIFIER_POINTER (c_parser_peek_token (parser)->value);
-      if (!strcmp (p, "seq_cst"))
+      if (c_parser_next_token_is (parser, CPP_COMMA)
+         && c_parser_peek_2nd_token (parser)->type == CPP_NAME)
+       c_parser_consume_token (parser);
+
+      if (c_parser_next_token_is (parser, CPP_NAME))
        {
-         seq_cst = true;
-         c_parser_consume_token (parser);
+         const char *p
+           = IDENTIFIER_POINTER (c_parser_peek_token (parser)->value);
+         if (!strcmp (p, "seq_cst"))
+           {
+             seq_cst = true;
+             c_parser_consume_token (parser);
+           }
        }
     }
   c_parser_skip_to_pragma_eol (parser);
index ae21342..5840461 100644 (file)
@@ -1,3 +1,9 @@
+2014-04-24  Jakub Jelinek  <jakub@redhat.com>
+
+       * parser.c (cp_parser_omp_atomic): Allow seq_cst before
+       atomic-clause, allow comma in between atomic-clause and
+       seq_cst.
+
 2014-04-24  Marc Glisse  <marc.glisse@inria.fr>
 
        PR libstdc++/43622
index 4e6a2b8..c1d94ae 100644 (file)
@@ -28534,6 +28534,20 @@ cp_parser_omp_atomic (cp_parser *parser, cp_token *pragma_tok)
       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
       const char *p = IDENTIFIER_POINTER (id);
 
+      if (!strcmp (p, "seq_cst"))
+       {
+         seq_cst = true;
+         cp_lexer_consume_token (parser->lexer);
+         if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA)
+             && cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_NAME)
+           cp_lexer_consume_token (parser->lexer);
+       }
+    }
+  if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
+    {
+      tree id = cp_lexer_peek_token (parser->lexer)->u.value;
+      const char *p = IDENTIFIER_POINTER (id);
+
       if (!strcmp (p, "read"))
        code = OMP_ATOMIC_READ;
       else if (!strcmp (p, "write"))
@@ -28547,16 +28561,22 @@ cp_parser_omp_atomic (cp_parser *parser, cp_token *pragma_tok)
       if (p)
        cp_lexer_consume_token (parser->lexer);
     }
-
-  if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
+  if (!seq_cst)
     {
-      tree id = cp_lexer_peek_token (parser->lexer)->u.value;
-      const char *p = IDENTIFIER_POINTER (id);
+      if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA)
+         && cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_NAME)
+       cp_lexer_consume_token (parser->lexer);
 
-      if (!strcmp (p, "seq_cst"))
+      if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
        {
-         seq_cst = true;
-         cp_lexer_consume_token (parser->lexer);
+         tree id = cp_lexer_peek_token (parser->lexer)->u.value;
+         const char *p = IDENTIFIER_POINTER (id);
+
+         if (!strcmp (p, "seq_cst"))
+           {
+             seq_cst = true;
+             cp_lexer_consume_token (parser->lexer);
+           }
        }
     }
   cp_parser_require_pragma_eol (parser, pragma_tok);
index 413d6ce..5813e5e 100644 (file)
@@ -1,3 +1,8 @@
+2014-04-24  Jakub Jelinek  <jakub@redhat.com>
+
+       * c-c++-common/gomp/atomic-16.c: Remove all dg-error directives.
+       Replace load with read and store with write.
+
 2014-04-24  Jeff Law  <law@redhat.com>
 
        PR target/60822
index 87fbaa2..9332396 100644 (file)
@@ -7,28 +7,28 @@ void
 foo ()
 {
   int v;
-  #pragma omp atomic seq_cst load      /* { dg-error "expected end of line" } */
-  v = x;                               /* { dg-error "invalid form" } */
-  #pragma omp atomic seq_cst, load     /* { dg-error "expected end of line" } */
-  v = x;                               /* { dg-error "invalid form" } */
-  #pragma omp atomic seq_cst store     /* { dg-error "expected end of line" } */
-  x = v;                               /* { dg-error "invalid form" } */
-  #pragma omp atomic seq_cst ,store    /* { dg-error "expected end of line" } */
-  x = v;                               /* { dg-error "invalid form" } */
-  #pragma omp atomic seq_cst update    /* { dg-error "expected end of line" } */
+  #pragma omp atomic seq_cst read
+  v = x;
+  #pragma omp atomic seq_cst, read
+  v = x;
+  #pragma omp atomic seq_cst write
+  x = v;
+  #pragma omp atomic seq_cst ,write
+  x = v;
+  #pragma omp atomic seq_cst update
   x += v;
-  #pragma omp atomic seq_cst , update  /* { dg-error "expected end of line" } */
+  #pragma omp atomic seq_cst , update
   x += v;
-  #pragma omp atomic seq_cst capture   /* { dg-error "expected end of line" } */
-  v = x += 2;                          /* { dg-error "invalid form" } */
-  #pragma omp atomic seq_cst, capture  /* { dg-error "expected end of line" } */
-  v = x += 2;                          /* { dg-error "invalid form" } */
-  #pragma omp atomic load , seq_cst    /* { dg-error "expected end of line" } */
-  v = x;                               /* { dg-error "invalid form" } */
-  #pragma omp atomic store ,seq_cst    /* { dg-error "expected end of line" } */
-  x = v;                               /* { dg-error "invalid form" } */
-  #pragma omp atomic update, seq_cst   /* { dg-error "expected end of line" } */
+  #pragma omp atomic seq_cst capture
+  v = x += 2;
+  #pragma omp atomic seq_cst, capture
+  v = x += 2;
+  #pragma omp atomic read , seq_cst
+  v = x;
+  #pragma omp atomic write ,seq_cst
+  x = v;
+  #pragma omp atomic update, seq_cst
   x += v;
-  #pragma omp atomic capture, seq_cst  /* { dg-error "expected end of line" } */
+  #pragma omp atomic capture, seq_cst
   v = x += 2;
 }
index 06f40ac..0b26b9f 100644 (file)
@@ -1,5 +1,10 @@
 2014-04-24  Jakub Jelinek  <jakub@redhat.com>
 
+       * testsuite/libgomp.c++/atomic-14.C: Allow seq_cst and
+       atomic type clauses in any order and optional comma in between.
+       * testsuite/libgomp.c++/atomic-15.C: Likewise.
+       * testsuite/libgomp.c/atomic-17.c: Likewise.
+
        * testsuite/libgomp.c/simd-7.c: New test.
        * testsuite/libgomp.c/simd-8.c: New test.
        * testsuite/libgomp.c/simd-9.c: New test.
index 4cd9df8..dccea3a 100644 (file)
@@ -13,13 +13,13 @@ main ()
     v = x;
   if (v != 3)
     abort ();
-  #pragma omp atomic update seq_cst
+  #pragma omp atomic seq_cst update
     x = 3 * 2 * 1 + x;
-  #pragma omp atomic read seq_cst
+  #pragma omp atomic read, seq_cst
     v = x;
   if (v != 9)
     abort ();
-  #pragma omp atomic capture seq_cst
+  #pragma omp atomic seq_cst, capture
     v = x = x | 16;
   if (v != 25)
     abort ();
@@ -27,15 +27,15 @@ main ()
     v = x = x + 14 * 2 / 4;
   if (v != 32)
     abort ();
-  #pragma omp atomic capture seq_cst
+  #pragma omp atomic seq_cst capture
     v = x = 5 | x;
   if (v != 37)
     abort ();
-  #pragma omp atomic capture seq_cst
+  #pragma omp atomic capture, seq_cst
     v = x = 40 + 12 - 2 - 7 - x;
   if (v != 6)
     abort ();
-  #pragma omp atomic read seq_cst
+  #pragma omp atomic seq_cst read
     v = x;
   if (v != 6)
     abort ();
@@ -43,7 +43,7 @@ main ()
     { v = x; x = 3 + x; }
   if (v != 6)
     abort ();
-  #pragma omp atomic capture seq_cst
+  #pragma omp atomic seq_cst capture
     { v = x; x = -1 * -1 * -1 * -1 - x; }
   if (v != 9)
     abort ();
@@ -51,11 +51,11 @@ main ()
     v = x;
   if (v != -8)
     abort ();
-  #pragma omp atomic capture seq_cst
+  #pragma omp atomic capture, seq_cst
     { x = 2 * 2 - x; v = x; }
   if (v != 12)
     abort ();
-  #pragma omp atomic capture seq_cst
+  #pragma omp atomic seq_cst capture
     { x = 7 & x; v = x; }
   if (v != 4)
     abort ();
@@ -63,7 +63,7 @@ main ()
     { v = x; x = 6; }
   if (v != 4)
     abort ();
-  #pragma omp atomic read seq_cst
+  #pragma omp atomic read, seq_cst
     v = x;
   if (v != 6)
     abort ();
@@ -71,11 +71,11 @@ main ()
     { v = x; x = 7 * 8 + 23; }
   if (v != 6)
     abort ();
-  #pragma omp atomic read seq_cst
+  #pragma omp atomic seq_cst, read
     v = x;
   if (v != 79)
     abort ();
-  #pragma omp atomic capture seq_cst
+  #pragma omp atomic capture seq_cst
     { v = x; x = 23 + 6 * 4; }
   if (v != 79)
     abort ();
@@ -83,7 +83,7 @@ main ()
     v = x;
   if (v != 47)
     abort ();
-  #pragma omp atomic capture seq_cst
+  #pragma omp atomic seq_cst capture
     { v = x; x = l ? 17 : 12; }
   if (v != 47)
     abort ();
index 1eabce7..9abefb6 100644 (file)
@@ -14,13 +14,13 @@ foo ()
     v = x;
   if (v != 3)
     abort ();
-  #pragma omp atomic update seq_cst
+  #pragma omp atomic seq_cst update
     x = 3 * 2 * 1 + x;
-  #pragma omp atomic read seq_cst
+  #pragma omp atomic read, seq_cst
     v = x;
   if (v != 9)
     abort ();
-  #pragma omp atomic capture seq_cst
+  #pragma omp atomic seq_cst, capture
     v = x = x | 16;
   if (v != 25)
     abort ();
@@ -28,15 +28,15 @@ foo ()
     v = x = x + 14 * 2 / 4;
   if (v != 32)
     abort ();
-  #pragma omp atomic capture seq_cst
+  #pragma omp atomic seq_cst capture
     v = x = 5 | x;
   if (v != 37)
     abort ();
-  #pragma omp atomic capture seq_cst
+  #pragma omp atomic capture, seq_cst
     v = x = 40 + 12 - 2 - 7 - x;
   if (v != 6)
     abort ();
-  #pragma omp atomic read seq_cst
+  #pragma omp atomic seq_cst read
     v = x;
   if (v != 6)
     abort ();
@@ -44,7 +44,7 @@ foo ()
     { v = x; x = 3 + x; }
   if (v != 6)
     abort ();
-  #pragma omp atomic capture seq_cst
+  #pragma omp atomic seq_cst capture
     { v = x; x = -1 * -1 * -1 * -1 - x; }
   if (v != 9)
     abort ();
@@ -52,11 +52,11 @@ foo ()
     v = x;
   if (v != -8)
     abort ();
-  #pragma omp atomic capture seq_cst
+  #pragma omp atomic capture, seq_cst
     { x = 2 * 2 - x; v = x; }
   if (v != 12)
     abort ();
-  #pragma omp atomic capture seq_cst
+  #pragma omp atomic seq_cst capture
     { x = 7 & x; v = x; }
   if (v != 4)
     abort ();
@@ -64,7 +64,7 @@ foo ()
     { v = x; x = 6; }
   if (v != 4)
     abort ();
-  #pragma omp atomic read seq_cst
+  #pragma omp atomic read, seq_cst
     v = x;
   if (v != 6)
     abort ();
@@ -72,11 +72,11 @@ foo ()
     { v = x; x = 7 * 8 + 23; }
   if (v != 6)
     abort ();
-  #pragma omp atomic read seq_cst
+  #pragma omp atomic seq_cst, read
     v = x;
   if (v != 79)
     abort ();
-  #pragma omp atomic capture seq_cst
+  #pragma omp atomic capture seq_cst
     { v = x; x = 23 + 6 * 4; }
   if (v != 79)
     abort ();
@@ -84,7 +84,7 @@ foo ()
     v = x;
   if (v != 47)
     abort ();
-  #pragma omp atomic capture seq_cst
+  #pragma omp atomic seq_cst capture
     { v = x; x = l ? 17 : 12; }
   if (v != 47)
     abort ();
index 2bd0e9b..147ab26 100644 (file)
@@ -13,13 +13,13 @@ main ()
     v = x;
   if (v != 3)
     abort ();
-  #pragma omp atomic update seq_cst
+  #pragma omp atomic seq_cst update
     x = 3 * 2 * 1 + x;
-  #pragma omp atomic read seq_cst
+  #pragma omp atomic read, seq_cst
     v = x;
   if (v != 9)
     abort ();
-  #pragma omp atomic capture seq_cst
+  #pragma omp atomic seq_cst, capture
     v = x = x | 16;
   if (v != 25)
     abort ();
@@ -27,15 +27,15 @@ main ()
     v = x = x + 14 * 2 / 4;
   if (v != 32)
     abort ();
-  #pragma omp atomic capture seq_cst
+  #pragma omp atomic seq_cst capture
     v = x = 5 | x;
   if (v != 37)
     abort ();
-  #pragma omp atomic capture seq_cst
+  #pragma omp atomic capture, seq_cst
     v = x = 40 + 12 - 2 - 7 - x;
   if (v != 6)
     abort ();
-  #pragma omp atomic read seq_cst
+  #pragma omp atomic seq_cst read
     v = x;
   if (v != 6)
     abort ();
@@ -43,7 +43,7 @@ main ()
     { v = x; x = 3 + x; }
   if (v != 6)
     abort ();
-  #pragma omp atomic capture seq_cst
+  #pragma omp atomic seq_cst capture
     { v = x; x = -1 * -1 * -1 * -1 - x; }
   if (v != 9)
     abort ();
@@ -51,11 +51,11 @@ main ()
     v = x;
   if (v != -8)
     abort ();
-  #pragma omp atomic capture seq_cst
+  #pragma omp atomic capture, seq_cst
     { x = 2 * 2 - x; v = x; }
   if (v != 12)
     abort ();
-  #pragma omp atomic capture seq_cst
+  #pragma omp atomic seq_cst capture
     { x = 7 & x; v = x; }
   if (v != 4)
     abort ();
@@ -63,7 +63,7 @@ main ()
     { v = x; x = 6; }
   if (v != 4)
     abort ();
-  #pragma omp atomic read seq_cst
+  #pragma omp atomic read, seq_cst
     v = x;
   if (v != 6)
     abort ();
@@ -71,11 +71,11 @@ main ()
     { v = x; x = 7 * 8 + 23; }
   if (v != 6)
     abort ();
-  #pragma omp atomic read seq_cst
+  #pragma omp atomic seq_cst, read
     v = x;
   if (v != 79)
     abort ();
-  #pragma omp atomic capture seq_cst
+  #pragma omp atomic capture seq_cst
     { v = x; x = 23 + 6 * 4; }
   if (v != 79)
     abort ();
@@ -83,7 +83,7 @@ main ()
     v = x;
   if (v != 47)
     abort ();
-  #pragma omp atomic capture seq_cst
+  #pragma omp atomic seq_cst capture
     { v = x; x = l ? 17 : 12; }
   if (v != 47)
     abort ();