Hi!

I've noticed today or recently 3 separate issues that this patch attempts to
address.
1) the sections syntax is (and has been that way already back in OpenMP 2.5):
#pragma omp sections [clause[[,] clause] ...] new-line
{
  [#pragma omp section new-line]
  structured-block
  [#pragma omp section new-line
  structured-block ]
  ...
}
but we were happily allowing a sequence of statements before first
#pragma omp section, rather than a single statement or { sequence of
statements }.
2) on single construct, there is a restriction:
"The copyprivate clause must not be used with the nowait clause."
that we weren't actually enforcing - came over this by seeing that
we would just force a barrier when seeing a copyprivate, so essentially
silently ignoring the nowait clause.  Again, this is already in OpenMP 2.5.
3) the seq_cst in the syntax in OpenMP 4.0 has to come after atomic-clause
and no comma is allowed in between those two (both in atomic construct
description and in the appendix grammar).

Richard, does this look ok to you?

2013-07-03  Jakub Jelinek  <ja...@redhat.com>

        * omp-low.c (expand_omp_single): Don't force barrier for
        copyprivate.
gcc/c/
        * c-parser.c (c_parser_omp_atomic): Disallow seq_cst before
        atomic-clause, disallow comma in between atomic-clause and
        seq_cst.
        (c_parser_omp_sections_scope): If section-sequence doesn't
        start with #pragma omp section, require exactly one structured-block
        instead of sequence of statements.
        * c-typeck.c (c_finish_omp_clauses): Diagnose copyprivate clause
        appearing together with nowait clause.
gcc/cp/
        * parser.c (cp_parser_omp_atomic): Disallow seq_cst before
        atomic-clause, disallow comma in between atomic-clause and
        seq_cst.
        (cp_parser_omp_sections_scope): If section-sequence doesn't
        start with #pragma omp section, require exactly one structured-block
        instead of sequence of statements.
        * semantics.c (finish_omp_clauses): Diagnose copyprivate clause
        appearing together with nowait clause.
gcc/testsuite/
        * g++.dg/gomp/block-0.C: Adjust for stricter #pragma omp sections
        parser.
        * g++.dg/gomp/block-3.C: Likewise.
        * gcc.dg/gomp/block-3.c: Likewise.
        * gcc.dg/gomp/nesting-1.c: Likewise.  Add further #pragma omp sections
        nesting tests.
        * c-c++-common/gomp/sections1.c: New test.
        * c-c++-common/gomp/single1.c: New test.
        * c-c++-common/gomp/atomic-16.c: New test.
libgomp/
        * testsuite/libgomp.c++/atomic-14.C: Adjust for stricter atomic
        seq_cst parser.
        * testsuite/libgomp.c++/atomic-15.C: Likewise.
        * testsuite/libgomp.c/atomic-17.c: Likewise.

--- gcc/c/c-parser.c.jj 2013-06-26 12:13:50.000000000 +0200
+++ gcc/c/c-parser.c    2013-07-03 17:17:40.614573329 +0200
@@ -10391,18 +10391,6 @@ c_parser_omp_atomic (location_t loc, c_p
   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;
@@ -10417,21 +10405,13 @@ c_parser_omp_atomic (location_t loc, c_p
       if (p)
        c_parser_consume_token (parser);
     }
-  if (!seq_cst)
+  if (c_parser_next_token_is (parser, CPP_NAME))
     {
-      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, "seq_cst"))
        {
-         const char *p
-           = IDENTIFIER_POINTER (c_parser_peek_token (parser)->value);
-         if (!strcmp (p, "seq_cst"))
-           {
-             seq_cst = true;
-             c_parser_consume_token (parser);
-           }
+         seq_cst = true;
+         c_parser_consume_token (parser);
        }
     }
   c_parser_skip_to_pragma_eol (parser);
@@ -11231,21 +11211,7 @@ c_parser_omp_sections_scope (location_t
 
   if (c_parser_peek_token (parser)->pragma_kind != PRAGMA_OMP_SECTION)
     {
-      substmt = push_stmt_list ();
-
-      while (1)
-       {
-          c_parser_statement (parser);
-
-         if (c_parser_peek_token (parser)->pragma_kind == PRAGMA_OMP_SECTION)
-           break;
-         if (c_parser_next_token_is (parser, CPP_CLOSE_BRACE))
-           break;
-         if (c_parser_next_token_is (parser, CPP_EOF))
-           break;
-       }
-
-      substmt = pop_stmt_list (substmt);
+      substmt = c_parser_omp_structured_block (parser);
       substmt = build1 (OMP_SECTION, void_type_node, substmt);
       SET_EXPR_LOCATION (substmt, loc);
       add_stmt (substmt);
--- gcc/c/c-typeck.c.jj 2013-07-03 11:17:05.000000000 +0200
+++ gcc/c/c-typeck.c    2013-07-03 17:26:32.459907384 +0200
@@ -10748,6 +10748,8 @@ c_finish_omp_clauses (tree clauses)
   tree c, t, *pc = &clauses;
   const char *name;
   bool branch_seen = false;
+  bool copyprivate_seen = false;
+  tree *nowait_clause = NULL;
 
   bitmap_obstack_initialize (NULL);
   bitmap_initialize (&generic_head, &bitmap_default_obstack);
@@ -10828,6 +10830,15 @@ c_finish_omp_clauses (tree clauses)
 
        case OMP_CLAUSE_COPYPRIVATE:
          name = "copyprivate";
+         copyprivate_seen = true;
+         if (nowait_clause)
+           {
+             error_at (OMP_CLAUSE_LOCATION (*nowait_clause),
+                       "%<nowait%> clause must not be used together "
+                       "with %<copyprivate%>");
+             *nowait_clause = OMP_CLAUSE_CHAIN (*nowait_clause);
+             nowait_clause = NULL;
+           }
          goto check_dup_generic;
 
        case OMP_CLAUSE_COPYIN:
@@ -10994,10 +11005,22 @@ c_finish_omp_clauses (tree clauses)
            }
          break;
 
+       case OMP_CLAUSE_NOWAIT:
+         if (copyprivate_seen)
+           {
+             error_at (OMP_CLAUSE_LOCATION (c),
+                       "%<nowait%> clause must not be used together "
+                       "with %<copyprivate%>");
+             remove = true;
+             break;
+           }
+         nowait_clause = pc;
+         pc = &OMP_CLAUSE_CHAIN (c);
+         continue;
+
        case OMP_CLAUSE_IF:
        case OMP_CLAUSE_NUM_THREADS:
        case OMP_CLAUSE_SCHEDULE:
-       case OMP_CLAUSE_NOWAIT:
        case OMP_CLAUSE_ORDERED:
        case OMP_CLAUSE_DEFAULT:
        case OMP_CLAUSE_UNTIED:
--- gcc/cp/parser.c.jj  2013-07-02 10:27:52.000000000 +0200
+++ gcc/cp/parser.c     2013-07-03 17:00:20.406911035 +0200
@@ -27939,20 +27939,6 @@ cp_parser_omp_atomic (cp_parser *parser,
       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"))
@@ -27966,22 +27952,16 @@ cp_parser_omp_atomic (cp_parser *parser,
       if (p)
        cp_lexer_consume_token (parser->lexer);
     }
-  if (!seq_cst)
+
+  if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
     {
-      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);
+      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_NAME))
+      if (!strcmp (p, "seq_cst"))
        {
-         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);
-           }
+         seq_cst = true;
+         cp_lexer_consume_token (parser->lexer);
        }
     }
   cp_parser_require_pragma_eol (parser, pragma_tok);
@@ -29079,26 +29059,7 @@ cp_parser_omp_sections_scope (cp_parser
 
   if (cp_lexer_peek_token (parser->lexer)->pragma_kind != PRAGMA_OMP_SECTION)
     {
-      unsigned save;
-
-      substmt = begin_omp_structured_block ();
-      save = cp_parser_begin_omp_structured_block (parser);
-
-      while (1)
-       {
-         cp_parser_statement (parser, NULL_TREE, false, NULL);
-
-         tok = cp_lexer_peek_token (parser->lexer);
-         if (tok->pragma_kind == PRAGMA_OMP_SECTION)
-           break;
-         if (tok->type == CPP_CLOSE_BRACE)
-           break;
-         if (tok->type == CPP_EOF)
-           break;
-       }
-
-      cp_parser_end_omp_structured_block (parser, save);
-      substmt = finish_omp_structured_block (substmt);
+      substmt = cp_parser_omp_structured_block (parser);
       substmt = build1 (OMP_SECTION, void_type_node, substmt);
       add_stmt (substmt);
     }
--- gcc/cp/semantics.c.jj       2013-07-02 11:47:51.000000000 +0200
+++ gcc/cp/semantics.c  2013-07-03 17:08:05.704191136 +0200
@@ -4555,6 +4555,7 @@ finish_omp_clauses (tree clauses)
   tree c, t, *pc = &clauses;
   const char *name;
   bool branch_seen = false;
+  bool copyprivate_seen = false;
 
   bitmap_obstack_initialize (NULL);
   bitmap_initialize (&generic_head, &bitmap_default_obstack);
@@ -4579,6 +4580,7 @@ finish_omp_clauses (tree clauses)
          goto check_dup_generic;
        case OMP_CLAUSE_COPYPRIVATE:
          name = "copyprivate";
+         copyprivate_seen = true;
          goto check_dup_generic;
        case OMP_CLAUSE_COPYIN:
          name = "copyin";
@@ -5099,6 +5101,16 @@ finish_omp_clauses (tree clauses)
          name = "copyin";
          need_copy_assignment = true;
          break;
+       case OMP_CLAUSE_NOWAIT:
+         if (copyprivate_seen)
+           {
+             error_at (OMP_CLAUSE_LOCATION (c),
+                       "%<nowait%> clause must not be used together "
+                       "with %<copyprivate%>");
+             *pc = OMP_CLAUSE_CHAIN (c);
+             continue;
+           }
+         /* FALLTHRU */
        default:
          pc = &OMP_CLAUSE_CHAIN (c);
          continue;
--- gcc/omp-low.c.jj    2013-07-03 10:47:23.000000000 +0200
+++ gcc/omp-low.c       2013-07-03 18:33:44.096675606 +0200
@@ -6660,24 +6660,17 @@ expand_omp_single (struct omp_region *re
 {
   basic_block entry_bb, exit_bb;
   gimple_stmt_iterator si;
-  bool need_barrier = false;
 
   entry_bb = region->entry;
   exit_bb = region->exit;
 
   si = gsi_last_bb (entry_bb);
-  /* The terminal barrier at the end of a GOMP_single_copy sequence cannot
-     be removed.  We need to ensure that the thread that entered the single
-     does not exit before the data is copied out by the other threads.  */
-  if (find_omp_clause (gimple_omp_single_clauses (gsi_stmt (si)),
-                      OMP_CLAUSE_COPYPRIVATE))
-    need_barrier = true;
   gcc_assert (gimple_code (gsi_stmt (si)) == GIMPLE_OMP_SINGLE);
   gsi_remove (&si, true);
   single_succ_edge (entry_bb)->flags = EDGE_FALLTHRU;
 
   si = gsi_last_bb (exit_bb);
-  if (!gimple_omp_return_nowait_p (gsi_stmt (si)) || need_barrier)
+  if (!gimple_omp_return_nowait_p (gsi_stmt (si)))
     {
       tree t = gimple_omp_return_lhs (gsi_stmt (si));
       gsi_insert_after (&si, build_omp_barrier (t), GSI_SAME_STMT);
--- gcc/testsuite/g++.dg/gomp/block-0.C.jj      2013-03-20 10:06:58.000000000 
+0100
+++ gcc/testsuite/g++.dg/gomp/block-0.C 2013-07-03 19:07:08.267301734 +0200
@@ -22,8 +22,10 @@ void foo()
     bar ();
   #pragma omp parallel sections
     {
-      bar ();
-      bar ();
+      {
+       bar ();
+       bar ();
+      }
     #pragma omp section
       bar ();
     }
--- gcc/testsuite/g++.dg/gomp/block-3.C.jj      2013-03-20 10:06:58.000000000 
+0100
+++ gcc/testsuite/g++.dg/gomp/block-3.C 2013-07-03 19:07:53.568555524 +0200
@@ -35,8 +35,10 @@ void foo()
 
   #pragma omp sections
     {
-      goto ok1;
-      ok1:;
+      {
+       goto ok1;
+       ok1:;
+      }
 
     #pragma omp section
       for (i = 0; i < 10; ++i)
--- gcc/testsuite/gcc.dg/gomp/block-3.c.jj      2013-03-20 10:06:09.000000000 
+0100
+++ gcc/testsuite/gcc.dg/gomp/block-3.c 2013-07-03 19:08:46.877316777 +0200
@@ -35,9 +35,10 @@ void foo()
 
   #pragma omp sections
     {
-      goto ok1;
-      ok1:;
-
+      {
+       goto ok1;
+       ok1:;
+      }
     #pragma omp section
       for (i = 0; i < 10; ++i)
        if (test(i))
--- gcc/testsuite/gcc.dg/gomp/nesting-1.c.jj    2013-03-20 10:06:09.000000000 
+0100
+++ gcc/testsuite/gcc.dg/gomp/nesting-1.c       2013-07-03 19:12:20.836748856 
+0200
@@ -28,17 +28,58 @@ f1 (void)
     #pragma omp for            /* { dg-error "may not be closely nested" } */
     for (j = 0; j < 3; j++)
       ;
+  }
+  #pragma omp sections
+  {
     #pragma omp sections       /* { dg-error "may not be closely nested" } */
     {
       ;
     #pragma omp section
       ;
     }
+  }
+  #pragma omp sections
+  {
     #pragma omp single         /* { dg-error "may not be closely nested" } */
       ;
+  }
+  #pragma omp sections
+  {
     #pragma omp master         /* { dg-error "may not be closely nested" } */
       ;
+  }
+  #pragma omp sections
+  {
+    #pragma omp section
+      ;
+  }
+  #pragma omp sections
+  {
     #pragma omp section
+    #pragma omp for            /* { dg-error "may not be closely nested" } */
+    for (j = 0; j < 3; j++)
+      ;
+  }
+  #pragma omp sections
+  {
+    #pragma omp section
+    #pragma omp sections       /* { dg-error "may not be closely nested" } */
+    {
+      ;
+    #pragma omp section
+      ;
+    }
+  }
+  #pragma omp sections
+  {
+    #pragma omp section
+    #pragma omp single         /* { dg-error "may not be closely nested" } */
+      ;
+  }
+  #pragma omp sections
+  {
+    #pragma omp section
+    #pragma omp master         /* { dg-error "may not be closely nested" } */
       ;
   }
   #pragma omp single
--- gcc/testsuite/c-c++-common/gomp/sections1.c.jj      2013-07-03 
18:48:43.964833172 +0200
+++ gcc/testsuite/c-c++-common/gomp/sections1.c 2013-07-03 19:04:21.378038799 
+0200
@@ -0,0 +1,73 @@
+/* { dg-do compile } */
+/* { dg-options "-fopenmp" } */
+
+void bar (int);
+
+void
+foo ()
+{
+  #pragma omp sections
+  {
+    bar (1);
+    #pragma omp section
+    {
+      bar (2);
+    }
+  }
+  #pragma omp sections
+  {
+    #pragma omp section
+    bar (3);
+    #pragma omp section
+    {
+      bar (4);
+      bar (5);
+    }
+  }
+  #pragma omp sections
+  {
+    {
+      bar (6);
+      bar (7);
+    }
+    #pragma omp section
+    bar (8);
+  }
+  #pragma omp sections
+  {
+    #pragma omp section
+    {
+      bar (9);
+    }
+    #pragma omp section
+    bar (10);
+    #pragma omp section
+    bar (11);
+  }
+  #pragma omp sections
+  {
+  }                            /* { dg-error "expression before" } */
+  #pragma omp sections
+  {
+    bar (12);
+    bar (13);                  /* { dg-error "pragma omp section" } */
+    #pragma omp section
+    bar (14);
+  }
+  #pragma omp sections
+  {
+    #pragma omp section
+  }                            /* { dg-error "expression before" } */
+  #pragma omp sections
+  {
+    bar (15);
+    #pragma omp section
+    bar (16);
+    bar (17);                  /* { dg-error "pragma omp section" } */
+  }
+  #pragma omp sections
+  {
+    bar (18);
+    #pragma omp section
+  }                            /* { dg-error "expression before" } */
+}
--- gcc/testsuite/c-c++-common/gomp/single1.c.jj        2013-07-03 
18:47:35.134974552 +0200
+++ gcc/testsuite/c-c++-common/gomp/single1.c   2013-07-03 19:06:12.386216714 
+0200
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+/* { dg-options "-fopenmp" } */
+
+void
+foo (int i)
+{
+  #pragma omp single copyprivate (i)
+    ;
+  #pragma omp single nowait
+    ;
+  #pragma omp single copyprivate (i) nowait    /* { dg-error "clause must not 
be used together with" } */
+    ;
+  #pragma omp single nowait copyprivate (i)    /* { dg-error "clause must not 
be used together with" } */
+    ;
+}
--- gcc/testsuite/c-c++-common/gomp/atomic-16.c.jj      2013-07-03 
18:53:14.907454993 +0200
+++ gcc/testsuite/c-c++-common/gomp/atomic-16.c 2013-07-03 19:02:19.171998602 
+0200
@@ -0,0 +1,34 @@
+/* { dg-do compile } */
+/* { dg-options "-fopenmp" } */
+
+int x = 6;
+
+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" } 
*/
+  x += v;
+  #pragma omp atomic seq_cst , update  /* { dg-error "expected end of line" } 
*/
+  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" } 
*/
+  x += v;
+  #pragma omp atomic capture, seq_cst  /* { dg-error "expected end of line" } 
*/
+  v = x += 2;
+}
--- libgomp/testsuite/libgomp.c++/atomic-14.C.jj        2013-04-30 
18:03:33.000000000 +0200
+++ libgomp/testsuite/libgomp.c++/atomic-14.C   2013-07-03 18:36:49.661658835 
+0200
@@ -13,13 +13,13 @@ main ()
     v = x;
   if (v != 3)
     abort ();
-  #pragma omp atomic seq_cst update
+  #pragma omp atomic update seq_cst
     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 seq_cst, capture
+  #pragma omp atomic capture seq_cst
     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 seq_cst capture
+  #pragma omp atomic capture seq_cst
     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 seq_cst read
+  #pragma omp atomic read seq_cst
     v = x;
   if (v != 6)
     abort ();
@@ -43,7 +43,7 @@ main ()
     { v = x; x = 3 + x; }
   if (v != 6)
     abort ();
-  #pragma omp atomic seq_cst capture
+  #pragma omp atomic capture seq_cst
     { 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 seq_cst capture
+  #pragma omp atomic capture seq_cst
     { 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 seq_cst, read
+  #pragma omp atomic read seq_cst
     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 seq_cst capture
+  #pragma omp atomic capture seq_cst
     { v = x; x = l ? 17 : 12; }
   if (v != 47)
     abort ();
--- libgomp/testsuite/libgomp.c++/atomic-15.C.jj        2013-04-30 
18:03:33.000000000 +0200
+++ libgomp/testsuite/libgomp.c++/atomic-15.C   2013-07-03 18:38:06.107417340 
+0200
@@ -14,13 +14,13 @@ foo ()
     v = x;
   if (v != 3)
     abort ();
-  #pragma omp atomic seq_cst update
+  #pragma omp atomic update seq_cst
     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 seq_cst, capture
+  #pragma omp atomic capture seq_cst
     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 seq_cst capture
+  #pragma omp atomic capture seq_cst
     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 seq_cst read
+  #pragma omp atomic read seq_cst
     v = x;
   if (v != 6)
     abort ();
@@ -44,7 +44,7 @@ foo ()
     { v = x; x = 3 + x; }
   if (v != 6)
     abort ();
-  #pragma omp atomic seq_cst capture
+  #pragma omp atomic capture seq_cst
     { 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 seq_cst capture
+  #pragma omp atomic capture seq_cst
     { 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 seq_cst, read
+  #pragma omp atomic read seq_cst
     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 seq_cst capture
+  #pragma omp atomic capture seq_cst
     { v = x; x = l ? 17 : 12; }
   if (v != 47)
     abort ();
--- libgomp/testsuite/libgomp.c/atomic-17.c.jj  2013-04-30 18:03:33.000000000 
+0200
+++ libgomp/testsuite/libgomp.c/atomic-17.c     2013-07-03 18:39:04.783423739 
+0200
@@ -13,13 +13,13 @@ main ()
     v = x;
   if (v != 3)
     abort ();
-  #pragma omp atomic seq_cst update
+  #pragma omp atomic update seq_cst
     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 seq_cst, capture
+  #pragma omp atomic capture seq_cst
     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 seq_cst capture
+  #pragma omp atomic capture seq_cst
     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 seq_cst read
+  #pragma omp atomic read seq_cst
     v = x;
   if (v != 6)
     abort ();
@@ -43,7 +43,7 @@ main ()
     { v = x; x = 3 + x; }
   if (v != 6)
     abort ();
-  #pragma omp atomic seq_cst capture
+  #pragma omp atomic capture seq_cst
     { 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 seq_cst capture
+  #pragma omp atomic capture seq_cst
     { 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 seq_cst, read
+  #pragma omp atomic read seq_cst
     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 seq_cst capture
+  #pragma omp atomic capture seq_cst
     { v = x; x = l ? 17 : 12; }
   if (v != 47)
     abort ();

        Jakub

Reply via email to