These are the changed rth made to the GOMP testsuite.. looks primarily like consolidation to c-c++-common from 2 other directories.

2011-10-31  Richard Henderson  <r...@redhat.com>

        * c-c++-common/gomp/atomic-10.c: Use cas_int; match __atomic builtin.
        * c-c++-common/gomp/atomic-3.c: Likewise.
        * c-c++-common/gomp/atomic-9.c: Likewise.

        * gcc.dg/gomp/atomic-1.c, gcc.dg/gomp/atomic-2.c,
        gcc.dg/gomp/atomic-3.c, gcc.dg/gomp/atomic-4.c, gcc.dg/gomp/atomic-7.c,
        gcc.dg/gomp/atomic-8.c, gcc.dg/gomp/atomic-9.c,
        gcc.dg/gomp/atomic-10.c, gcc.dg/gomp/atomic-12.c,
        gcc.dg/gomp/atomic-13.c, gcc.dg/gomp/atomic-14.c,
        gcc.dg/gomp/atomic-15.c: Move to c-c++-common/gomp/.
        * g++.dg/gomp/atomic-1.C, g++.dg/gomp/atomic-2.C,
        g++.dg/gomp/atomic-3.C, g++.dg/gomp/atomic-4.C, g++.dg/gomp/atomic-7.C,
        g++.dg/gomp/atomic-8.C, g++.dg/gomp/atomic-9.C,
        g++.dg/gomp/atomic-10.C, g++.dg/gomp/atomic-11.C,
        g++.dg/gomp/atomic-12.C, g++.dg/gomp/atomic-13.C,
        g++.dg/gomp/atomic-15.C: Remove.
        * gcc.dg/gomp/gomp.exp, g++.dg/gomp/gomp.exp: Run c-c++-common tests.

Index: testsuite/gcc.dg/gomp/atomic-14.c
===================================================================
*** testsuite/gcc.dg/gomp/atomic-14.c   (.../trunk/gcc) (revision 180790)
--- testsuite/gcc.dg/gomp/atomic-14.c   (.../branches/cxx-mem-model/gcc)        
(revision 180839)
***************
*** 1,43 ****
- /* PR middle-end/45423 */
- /* { dg-do compile } */
- /* { dg-options "-fopenmp" } */
- 
- #ifdef __cplusplus
- bool *baz ();
- #else
- _Bool *baz ();
- #endif
- int *bar ();
- 
- int
- foo (void)
- {
-   #pragma omp barrier
-   #pragma omp atomic
-     (*bar ())++;
-   #pragma omp barrier
-   #pragma omp atomic
-     ++(*bar ());
-   #pragma omp barrier
-   #pragma omp atomic
-     (*bar ())--;
-   #pragma omp barrier
-   #pragma omp atomic
-     --(*bar ());
-   #pragma omp barrier
-   #pragma omp atomic
-     (*baz ())++;
-   #pragma omp barrier
-   #pragma omp atomic
-     ++(*baz ());
- #ifndef __cplusplus
-   #pragma omp barrier
-   #pragma omp atomic
-     (*baz ())--;
-   #pragma omp barrier
-   #pragma omp atomic
-     --(*baz ());
-   #pragma omp barrier
- #endif
-   return 0;
- }
--- 0 ----
Index: testsuite/gcc.dg/gomp/atomic-4.c
===================================================================
*** testsuite/gcc.dg/gomp/atomic-4.c    (.../trunk/gcc) (revision 180790)
--- testsuite/gcc.dg/gomp/atomic-4.c    (.../branches/cxx-mem-model/gcc)        
(revision 180839)
***************
*** 1,24 ****
- /* { dg-do compile } */
- 
- int a[4];
- int *p;
- struct S { int x; int y[4]; } s;
- int *bar(void);
- 
- void f1(void)
- {
-   #pragma omp atomic
-     a[4] += 1;
-   #pragma omp atomic
-     *p += 1;
-   #pragma omp atomic
-     s.x += 1;
-   #pragma omp atomic
-     s.y[*p] += 1;
-   #pragma omp atomic
-     s.y[*p] *= 42;
-   #pragma omp atomic
-     *bar() += 1;
-   #pragma omp atomic
-     *bar() *= 42;
- }
--- 0 ----
Index: testsuite/gcc.dg/gomp/atomic-8.c
===================================================================
*** testsuite/gcc.dg/gomp/atomic-8.c    (.../trunk/gcc) (revision 180790)
--- testsuite/gcc.dg/gomp/atomic-8.c    (.../branches/cxx-mem-model/gcc)        
(revision 180839)
***************
*** 1,21 ****
- /* { dg-do compile } */
- 
- long double z;
- 
- void f3(void)
- {
-   #pragma omp atomic
-     z++;
-   #pragma omp atomic
-     z--;
-   #pragma omp atomic
-     ++z;
-   #pragma omp atomic
-     --z;
-   #pragma omp atomic
-     z += 1;
-   #pragma omp atomic
-     z *= 3;
-   #pragma omp atomic
-     z /= 3;
- }
--- 0 ----
Index: testsuite/gcc.dg/gomp/atomic-11.c
===================================================================
*** testsuite/gcc.dg/gomp/atomic-11.c   (.../trunk/gcc) (revision 180790)
--- testsuite/gcc.dg/gomp/atomic-11.c   (.../branches/cxx-mem-model/gcc)        
(revision 180839)
***************
*** 1,17 ****
- /* PR middle-end/36877 */
- /* { dg-do compile } */
- /* { dg-options "-fopenmp" } */
- /* { dg-options "-fopenmp -march=i386" { target { { i?86-*-* x86_64-*-* } && 
ia32 } } } */
- 
- int i;
- float f;
- 
- void foo (void)
- {
- #pragma omp atomic
-   i++;
- #pragma omp atomic
-   f += 1.0;
- }
- 
- /* { dg-final { scan-assembler-not "__sync_(fetch|add|bool|val)" { target 
i?86-*-* x86_64-*-* powerpc*-*-* ia64-*-* s390*-*-* sparc*-*-* } } } */
--- 0 ----
Index: testsuite/gcc.dg/gomp/atomic-15.c
===================================================================
*** testsuite/gcc.dg/gomp/atomic-15.c   (.../trunk/gcc) (revision 180790)
--- testsuite/gcc.dg/gomp/atomic-15.c   (.../branches/cxx-mem-model/gcc)        
(revision 180839)
***************
*** 1,46 ****
- /* { dg-do compile } */
- /* { dg-options "-fopenmp" } */
- 
- int x = 6;
- 
- int
- main ()
- {
-   int v;
-   #pragma omp atomic
-     x = x * 7 + 6;    /* { dg-error "expected" } */
-   #pragma omp atomic
-     x = x * 7 ^ 6;    /* { dg-error "expected" } */
-   #pragma omp atomic update
-     x = x - 8 + 6;    /* { dg-error "expected" } */
-   #pragma omp atomic
-     x = x ^ 7 | 2;    /* { dg-error "expected" } */
-   #pragma omp atomic
-     x = x / 7 * 2;    /* { dg-error "expected" } */
-   #pragma omp atomic
-     x = x / 7 / 2;    /* { dg-error "expected" } */
-   #pragma omp atomic capture
-     v = x = x | 6;    /* { dg-error "invalid operator" } */
-   #pragma omp atomic capture
-     { v = x; x = x * 7 + 6; } /* { dg-error "expected" } */
-   #pragma omp atomic capture
-     { v = x; x = x * 7 ^ 6; } /* { dg-error "expected" } */
-   #pragma omp atomic capture
-     { v = x; x = x - 8 + 6; } /* { dg-error "expected" } */
-   #pragma omp atomic capture
-     { v = x; x = x ^ 7 | 2; } /* { dg-error "expected" } */
-   #pragma omp atomic capture
-     { v = x; x = x / 7 * 2; } /* { dg-error "expected" } */
-   #pragma omp atomic capture
-     { v = x; x = x / 7 / 2; } /* { dg-error "expected" } */
-   #pragma omp atomic capture
-     { x = x * 7 + 6; v = x; } /* { dg-error "expected" } */
-   #pragma omp atomic capture
-     { x = x * 7 ^ 6; v = x; } /* { dg-error "expected" } */
-   #pragma omp atomic capture
-     { x = x - 8 + 6; v = x; } /* { dg-error "expected" } */
-   #pragma omp atomic capture
-     { x = x ^ 7 | 2; v = x; } /* { dg-error "expected" } */
-   (void) v;
-   return 0;
- }
--- 0 ----
Index: testsuite/gcc.dg/gomp/atomic-1.c
===================================================================
*** testsuite/gcc.dg/gomp/atomic-1.c    (.../trunk/gcc) (revision 180790)
--- testsuite/gcc.dg/gomp/atomic-1.c    (.../branches/cxx-mem-model/gcc)        
(revision 180839)
***************
*** 1,99 ****
- /* { dg-do compile } */
- 
- int x;
- volatile int y;
- volatile unsigned char z;
- 
- void f1(void)
- {
-   #pragma omp atomic
-     x++;
-   #pragma omp atomic
-     x--;
-   #pragma omp atomic
-     ++x;
-   #pragma omp atomic
-     --x;
-   #pragma omp atomic
-     x += 1;
-   #pragma omp atomic
-     x -= y;
-   #pragma omp atomic
-     x |= 1;
-   #pragma omp atomic
-     x &= 1;
-   #pragma omp atomic
-     x ^= 1;
-   #pragma omp atomic
-     x *= 3;
-   #pragma omp atomic
-     x /= 3;
-   #pragma omp atomic
-     x /= 3;
-   #pragma omp atomic
-     x <<= 3;
-   #pragma omp atomic
-     x >>= 3;
- }
- 
- void f2(void)
- {
-   #pragma omp atomic
-     y++;
-   #pragma omp atomic
-     y--;
-   #pragma omp atomic
-     ++y;
-   #pragma omp atomic
-     --y;
-   #pragma omp atomic
-     y += 1;
-   #pragma omp atomic
-     y -= x;
-   #pragma omp atomic
-     y |= 1;
-   #pragma omp atomic
-     y &= 1;
-   #pragma omp atomic
-     y ^= 1;
-   #pragma omp atomic
-     y *= 3;
-   #pragma omp atomic
-     y /= 3;
-   #pragma omp atomic
-     y /= 3;
-   #pragma omp atomic
-     y <<= 3;
-   #pragma omp atomic
-     y >>= 3;
- }
- 
- void f3(void)
- {
-   #pragma omp atomic
-     z++;
-   #pragma omp atomic
-     z--;
-   #pragma omp atomic
-     ++z;
-   #pragma omp atomic
-     --z;
-   #pragma omp atomic
-     z += 1;
-   #pragma omp atomic
-     z |= 1;
-   #pragma omp atomic
-     z &= 1;
-   #pragma omp atomic
-     z ^= 1;
-   #pragma omp atomic
-     z *= 3;
-   #pragma omp atomic
-     z /= 3;
-   #pragma omp atomic
-     z /= 3;
-   #pragma omp atomic
-     z <<= 3;
-   #pragma omp atomic
-     z >>= 3;
- }
--- 0 ----
Index: testsuite/gcc.dg/gomp/atomic-9.c
===================================================================
*** testsuite/gcc.dg/gomp/atomic-9.c    (.../trunk/gcc) (revision 180790)
--- testsuite/gcc.dg/gomp/atomic-9.c    (.../branches/cxx-mem-model/gcc)        
(revision 180839)
***************
*** 1,13 ****
- /* { dg-do compile } */
- /* { dg-options "-fopenmp -fdump-tree-ompexp" } */
- 
- volatile int *bar(void);
- 
- void f1(void)
- {
-   #pragma omp atomic
-     *bar() += 1;
- }
- 
- /* { dg-final { scan-tree-dump-times "__sync_fetch_and_add" 1 "ompexp" { 
target i?86-*-* x86_64-*-* ia64-*-* powerpc*-*-* alpha*-*-* } } } */
- /* { dg-final { cleanup-tree-dump "ompexp" } } */
--- 0 ----
Index: testsuite/gcc.dg/gomp/atomic-12.c
===================================================================
*** testsuite/gcc.dg/gomp/atomic-12.c   (.../trunk/gcc) (revision 180790)
--- testsuite/gcc.dg/gomp/atomic-12.c   (.../branches/cxx-mem-model/gcc)        
(revision 180839)
***************
*** 1,306 ****
- /* PR middle-end/45423 */
- /* { dg-do compile } */
- /* { dg-options "-fopenmp -fdump-tree-gimple -g0" } */
- /* atomicvar should never be referenced in between the barrier and
-    following #pragma omp atomic_load.  */
- /* { dg-final { scan-tree-dump-not "barrier\[^#\]*atomicvar" "gimple" } } */
- /* { dg-final { cleanup-tree-dump "gimple" } } */
- 
- #ifdef __cplusplus
- bool atomicvar, c;
- #else
- _Bool atomicvar, c;
- #endif
- int i, atomicvar2, c2;
- 
- int
- foo (void)
- {
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar |= -1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar |= 0;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar |= 1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar |= 2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar |= c;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar ^= -1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar ^= 0;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar ^= 1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar ^= 2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar ^= c;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar &= -1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar &= 0;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar &= 1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar &= 2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar &= c;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar += -1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar += 0;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar += 1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar += 2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar += c;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar -= -1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar -= 0;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar -= 1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar -= 2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar -= c;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar *= -1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar *= 0;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar *= 1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar *= 2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar *= c;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar /= -1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar /= 1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar /= 2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar /= c;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar <<= 0;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar <<= 1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar <<= 2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar <<= i;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar >>= 0;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar >>= 1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar >>= 2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar >>= i;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar++;
-   #pragma omp barrier
-   #pragma omp atomic
-     ++atomicvar;
-   #pragma omp barrier
- #ifndef __cplusplus
-   #pragma omp atomic
-     atomicvar--;
-   #pragma omp barrier
-   #pragma omp atomic
-     --atomicvar;
-   #pragma omp barrier
- #endif
-   return 0;
- }
- 
- int
- bar (void)
- {
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 |= -1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 |= 0;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 |= 1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 |= 2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 |= c2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 ^= -1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 ^= 0;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 ^= 1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 ^= 2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 ^= c2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 &= -1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 &= 0;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 &= 1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 &= 2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 &= c2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 += -1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 += 0;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 += 1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 += 2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 += c2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 -= -1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 -= 0;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 -= 1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 -= 2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 -= c2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 *= -1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 *= 0;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 *= 1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 *= 2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 *= c2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 /= -1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 /= 1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 /= 2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 /= c2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 <<= 0;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 <<= 1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 <<= 2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 <<= i;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 >>= 0;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 >>= 1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 >>= 2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 >>= i;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2++;
-   #pragma omp barrier
-   #pragma omp atomic
-     ++atomicvar2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2--;
-   #pragma omp barrier
-   #pragma omp atomic
-     --atomicvar2;
-   #pragma omp barrier
-   return 0;
- }
--- 0 ----
Index: testsuite/gcc.dg/gomp/atomic-2.c
===================================================================
*** testsuite/gcc.dg/gomp/atomic-2.c    (.../trunk/gcc) (revision 180790)
--- testsuite/gcc.dg/gomp/atomic-2.c    (.../branches/cxx-mem-model/gcc)        
(revision 180839)
***************
*** 1,23 ****
- /* { dg-do compile } */
- 
- float x, y;
- 
- void f1(void)
- {
-   #pragma omp atomic
-     x++;
-   #pragma omp atomic
-     x--;
-   #pragma omp atomic
-     ++x;
-   #pragma omp atomic
-     --x;
-   #pragma omp atomic
-     x += 1;
-   #pragma omp atomic
-     x -= y;
-   #pragma omp atomic
-     x *= 3;
-   #pragma omp atomic
-     x /= 3;
- }
--- 0 ----
Index: testsuite/gcc.dg/gomp/atomic-13.c
===================================================================
*** testsuite/gcc.dg/gomp/atomic-13.c   (.../trunk/gcc) (revision 180790)
--- testsuite/gcc.dg/gomp/atomic-13.c   (.../branches/cxx-mem-model/gcc)        
(revision 180839)
***************
*** 1,9 ****
- /* PR middle-end/45423 */
- /* { dg-do compile } */
- /* { dg-options "-fopenmp -fdump-tree-gimple -g0 -O2" } */
- /* atomicvar should never be referenced in between the barrier and
-    following #pragma omp atomic_load.  */
- /* { dg-final { scan-tree-dump-not "barrier\[^#\]*atomicvar" "gimple" } } */
- /* { dg-final { cleanup-tree-dump "gimple" } } */
- 
- #include "atomic-12.c"
--- 0 ----
Index: testsuite/gcc.dg/gomp/atomic-3.c
===================================================================
*** testsuite/gcc.dg/gomp/atomic-3.c    (.../trunk/gcc) (revision 180790)
--- testsuite/gcc.dg/gomp/atomic-3.c    (.../branches/cxx-mem-model/gcc)        
(revision 180839)
***************
*** 1,13 ****
- /* { dg-do compile } */
- /* { dg-options "-fopenmp -fdump-tree-ompexp" } */
- 
- int *xyzzy;
- 
- void f1(void)
- {
-   #pragma omp atomic
-     xyzzy++;
- }
- 
- /* { dg-final { scan-tree-dump-times "xyzzy, 4" 1 "ompexp" { target i?86-*-* 
x86_64-*-* ia64-*-* powerpc*-*-* alpha*-*-* } } } */
- /* { dg-final { cleanup-tree-dump "ompexp" } } */
--- 0 ----
Index: testsuite/gcc.dg/gomp/atomic-7.c
===================================================================
*** testsuite/gcc.dg/gomp/atomic-7.c    (.../trunk/gcc) (revision 180790)
--- testsuite/gcc.dg/gomp/atomic-7.c    (.../branches/cxx-mem-model/gcc)        
(revision 180839)
***************
*** 1,23 ****
- /* { dg-do compile } */
- 
- double x, y;
- 
- void f2(void)
- {
-   #pragma omp atomic
-     y++;
-   #pragma omp atomic
-     y--;
-   #pragma omp atomic
-     ++y;
-   #pragma omp atomic
-     --y;
-   #pragma omp atomic
-     y += 1;
-   #pragma omp atomic
-     y -= x;
-   #pragma omp atomic
-     y *= 3;
-   #pragma omp atomic
-     y /= 3;
- }
--- 0 ----
Index: testsuite/gcc.dg/gomp/atomic-10.c
===================================================================
*** testsuite/gcc.dg/gomp/atomic-10.c   (.../trunk/gcc) (revision 180790)
--- testsuite/gcc.dg/gomp/atomic-10.c   (.../branches/cxx-mem-model/gcc)        
(revision 180839)
***************
*** 1,24 ****
- /* PR middle-end/28046 */
- /* { dg-do compile } */
- /* { dg-options "-fopenmp -fdump-tree-ompexp" } */
- 
- int a[3], b;
- struct C { int x; int y; } c;
- 
- int bar (void), *baz (void);
- 
- void
- foo (void)
- {
- #pragma omp atomic
-   a[2] += bar ();
- #pragma omp atomic
-   b += bar ();
- #pragma omp atomic
-   c.y += bar ();
- #pragma omp atomic
-   *baz () += bar ();
- }
- 
- /* { dg-final { scan-tree-dump-times "__sync_fetch_and_add" 4 "ompexp" { 
target i?86-*-* x86_64-*-* ia64-*-* powerpc*-*-* alpha*-*-* } } } */
- /* { dg-final { cleanup-tree-dump "ompexp" } } */
--- 0 ----
Index: testsuite/gcc.dg/gomp/gomp.exp
===================================================================
*** testsuite/gcc.dg/gomp/gomp.exp      (.../trunk/gcc) (revision 180790)
--- testsuite/gcc.dg/gomp/gomp.exp      (.../branches/cxx-mem-model/gcc)        
(revision 180839)
*************** if ![check_effective_target_fopenmp] {
*** 29,36 ****
  dg-init
  
  # Main loop.
! dg-runtest [lsort [find $srcdir/$subdir *.c]] \
!       "" "-fopenmp"
  
  # All done.
  dg-finish
--- 29,35 ----
  dg-init
  
  # Main loop.
! dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.c 
$srcdir/c-c++-common/gomp/*.c]] "" "-fopenmp"
  
  # All done.
  dg-finish
Index: testsuite/g++.dg/gomp/atomic-4.C
===================================================================
*** testsuite/g++.dg/gomp/atomic-4.C    (.../trunk/gcc) (revision 180790)
--- testsuite/g++.dg/gomp/atomic-4.C    (.../branches/cxx-mem-model/gcc)        
(revision 180839)
***************
*** 1,24 ****
- /* { dg-do compile } */
- 
- int a[4];
- int *p;
- struct S { int x; int y[4]; } s;
- int *bar(void);
- 
- void f1(void)
- {
-   #pragma omp atomic
-     a[4] += 1;
-   #pragma omp atomic
-     *p += 1;
-   #pragma omp atomic
-     s.x += 1;
-   #pragma omp atomic
-     s.y[*p] += 1;
-   #pragma omp atomic
-     s.y[*p] *= 42;
-   #pragma omp atomic
-     *bar() += 1;
-   #pragma omp atomic
-     *bar() *= 42;
- }
--- 0 ----
Index: testsuite/g++.dg/gomp/atomic-8.C
===================================================================
*** testsuite/g++.dg/gomp/atomic-8.C    (.../trunk/gcc) (revision 180790)
--- testsuite/g++.dg/gomp/atomic-8.C    (.../branches/cxx-mem-model/gcc)        
(revision 180839)
***************
*** 1,21 ****
- /* { dg-do compile } */
- 
- long double z;
- 
- void f3(void)
- {
-   #pragma omp atomic
-     z++;
-   #pragma omp atomic
-     z--;
-   #pragma omp atomic
-     ++z;
-   #pragma omp atomic
-     --z;
-   #pragma omp atomic
-     z += 1;
-   #pragma omp atomic
-     z *= 3;
-   #pragma omp atomic
-     z /= 3;
- }
--- 0 ----
Index: testsuite/g++.dg/gomp/atomic-11.C
===================================================================
*** testsuite/g++.dg/gomp/atomic-11.C   (.../trunk/gcc) (revision 180790)
--- testsuite/g++.dg/gomp/atomic-11.C   (.../branches/cxx-mem-model/gcc)        
(revision 180839)
***************
*** 1,306 ****
- /* PR middle-end/45423 */
- /* { dg-do compile } */
- /* { dg-options "-fopenmp -fdump-tree-gimple -g0" } */
- /* atomicvar should never be referenced in between the barrier and
-    following #pragma omp atomic_load.  */
- /* { dg-final { scan-tree-dump-not "barrier\[^#\]*atomicvar" "gimple" } } */
- /* { dg-final { cleanup-tree-dump "gimple" } } */
- 
- #ifdef __cplusplus
- bool atomicvar, c;
- #else
- _Bool atomicvar, c;
- #endif
- int i, atomicvar2, c2;
- 
- int
- foo (void)
- {
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar |= -1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar |= 0;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar |= 1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar |= 2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar |= c;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar ^= -1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar ^= 0;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar ^= 1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar ^= 2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar ^= c;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar &= -1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar &= 0;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar &= 1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar &= 2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar &= c;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar += -1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar += 0;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar += 1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar += 2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar += c;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar -= -1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar -= 0;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar -= 1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar -= 2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar -= c;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar *= -1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar *= 0;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar *= 1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar *= 2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar *= c;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar /= -1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar /= 1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar /= 2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar /= c;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar <<= 0;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar <<= 1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar <<= 2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar <<= i;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar >>= 0;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar >>= 1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar >>= 2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar >>= i;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar++;
-   #pragma omp barrier
-   #pragma omp atomic
-     ++atomicvar;
-   #pragma omp barrier
- #ifndef __cplusplus
-   #pragma omp atomic
-     atomicvar--;
-   #pragma omp barrier
-   #pragma omp atomic
-     --atomicvar;
-   #pragma omp barrier
- #endif
-   return 0;
- }
- 
- int
- bar (void)
- {
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 |= -1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 |= 0;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 |= 1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 |= 2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 |= c2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 ^= -1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 ^= 0;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 ^= 1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 ^= 2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 ^= c2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 &= -1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 &= 0;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 &= 1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 &= 2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 &= c2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 += -1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 += 0;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 += 1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 += 2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 += c2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 -= -1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 -= 0;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 -= 1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 -= 2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 -= c2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 *= -1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 *= 0;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 *= 1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 *= 2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 *= c2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 /= -1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 /= 1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 /= 2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 /= c2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 <<= 0;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 <<= 1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 <<= 2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 <<= i;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 >>= 0;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 >>= 1;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 >>= 2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2 >>= i;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2++;
-   #pragma omp barrier
-   #pragma omp atomic
-     ++atomicvar2;
-   #pragma omp barrier
-   #pragma omp atomic
-     atomicvar2--;
-   #pragma omp barrier
-   #pragma omp atomic
-     --atomicvar2;
-   #pragma omp barrier
-   return 0;
- }
--- 0 ----
Index: testsuite/g++.dg/gomp/atomic-15.C
===================================================================
*** testsuite/g++.dg/gomp/atomic-15.C   (.../trunk/gcc) (revision 180790)
--- testsuite/g++.dg/gomp/atomic-15.C   (.../branches/cxx-mem-model/gcc)        
(revision 180839)
***************
*** 1,46 ****
- // { dg-do compile }
- // { dg-options "-fopenmp" }
- 
- int x = 6;
- 
- int
- main ()
- {
-   int v;
-   #pragma omp atomic
-     x = x * 7 + 6;    // { dg-error "expected" }
-   #pragma omp atomic
-     x = x * 7 ^ 6;    // { dg-error "expected" }
-   #pragma omp atomic update
-     x = x - 8 + 6;    // { dg-error "expected" }
-   #pragma omp atomic
-     x = x ^ 7 | 2;    // { dg-error "expected" }
-   #pragma omp atomic
-     x = x / 7 * 2;    // { dg-error "expected" }
-   #pragma omp atomic
-     x = x / 7 / 2;    // { dg-error "expected" }
-   #pragma omp atomic capture
-     v = x = x | 6;    // { dg-error "invalid operator" }
-   #pragma omp atomic capture
-     { v = x; x = x * 7 + 6; } // { dg-error "expected" }
-   #pragma omp atomic capture
-     { v = x; x = x * 7 ^ 6; } // { dg-error "expected" }
-   #pragma omp atomic capture
-     { v = x; x = x - 8 + 6; } // { dg-error "expected" }
-   #pragma omp atomic capture
-     { v = x; x = x ^ 7 | 2; } // { dg-error "expected" }
-   #pragma omp atomic capture
-     { v = x; x = x / 7 * 2; } // { dg-error "expected" }
-   #pragma omp atomic capture
-     { v = x; x = x / 7 / 2; } // { dg-error "expected" }
-   #pragma omp atomic capture
-     { x = x * 7 + 6; v = x; } // { dg-error "expected" }
-   #pragma omp atomic capture
-     { x = x * 7 ^ 6; v = x; } // { dg-error "expected" }
-   #pragma omp atomic capture
-     { x = x - 8 + 6; v = x; } // { dg-error "expected" }
-   #pragma omp atomic capture
-     { x = x ^ 7 | 2; v = x; } // { dg-error "expected" }
-   (void) v;
-   return 0;
- }
--- 0 ----
Index: testsuite/g++.dg/gomp/atomic-1.C
===================================================================
*** testsuite/g++.dg/gomp/atomic-1.C    (.../trunk/gcc) (revision 180790)
--- testsuite/g++.dg/gomp/atomic-1.C    (.../branches/cxx-mem-model/gcc)        
(revision 180839)
***************
*** 1,99 ****
- /* { dg-do compile } */
- 
- int x;
- volatile int y;
- volatile unsigned char z;
- 
- void f1(void)
- {
-   #pragma omp atomic
-     x++;
-   #pragma omp atomic
-     x--;
-   #pragma omp atomic
-     ++x;
-   #pragma omp atomic
-     --x;
-   #pragma omp atomic
-     x += 1;
-   #pragma omp atomic
-     x -= y;
-   #pragma omp atomic
-     x |= 1;
-   #pragma omp atomic
-     x &= 1;
-   #pragma omp atomic
-     x ^= 1;
-   #pragma omp atomic
-     x *= 3;
-   #pragma omp atomic
-     x /= 3;
-   #pragma omp atomic
-     x /= 3;
-   #pragma omp atomic
-     x <<= 3;
-   #pragma omp atomic
-     x >>= 3;
- }
- 
- void f2(void)
- {
-   #pragma omp atomic
-     y++;
-   #pragma omp atomic
-     y--;
-   #pragma omp atomic
-     ++y;
-   #pragma omp atomic
-     --y;
-   #pragma omp atomic
-     y += 1;
-   #pragma omp atomic
-     y -= x;
-   #pragma omp atomic
-     y |= 1;
-   #pragma omp atomic
-     y &= 1;
-   #pragma omp atomic
-     y ^= 1;
-   #pragma omp atomic
-     y *= 3;
-   #pragma omp atomic
-     y /= 3;
-   #pragma omp atomic
-     y /= 3;
-   #pragma omp atomic
-     y <<= 3;
-   #pragma omp atomic
-     y >>= 3;
- }
- 
- void f3(void)
- {
-   #pragma omp atomic
-     z++;
-   #pragma omp atomic
-     z--;
-   #pragma omp atomic
-     ++z;
-   #pragma omp atomic
-     --z;
-   #pragma omp atomic
-     z += 1;
-   #pragma omp atomic
-     z |= 1;
-   #pragma omp atomic
-     z &= 1;
-   #pragma omp atomic
-     z ^= 1;
-   #pragma omp atomic
-     z *= 3;
-   #pragma omp atomic
-     z /= 3;
-   #pragma omp atomic
-     z /= 3;
-   #pragma omp atomic
-     z <<= 3;
-   #pragma omp atomic
-     z >>= 3;
- }
--- 0 ----
Index: testsuite/g++.dg/gomp/atomic-9.C
===================================================================
*** testsuite/g++.dg/gomp/atomic-9.C    (.../trunk/gcc) (revision 180790)
--- testsuite/g++.dg/gomp/atomic-9.C    (.../branches/cxx-mem-model/gcc)        
(revision 180839)
***************
*** 1,13 ****
- /* { dg-do compile } */
- /* { dg-options "-fopenmp -fdump-tree-ompexp" } */
- 
- volatile int *bar(void);
- 
- void f1(void)
- {
-   #pragma omp atomic
-     *bar() += 1;
- }
- 
- /* { dg-final { scan-tree-dump-times "__sync_fetch_and_add" 1 "ompexp" { 
target i?86-*-* x86_64-*-* ia64-*-* powerpc*-*-* alpha*-*-* } } } */
- /* { dg-final { cleanup-tree-dump "ompexp" } } */
--- 0 ----
Index: testsuite/g++.dg/gomp/atomic-12.C
===================================================================
*** testsuite/g++.dg/gomp/atomic-12.C   (.../trunk/gcc) (revision 180790)
--- testsuite/g++.dg/gomp/atomic-12.C   (.../branches/cxx-mem-model/gcc)        
(revision 180839)
***************
*** 1,9 ****
- /* PR middle-end/45423 */
- /* { dg-do compile } */
- /* { dg-options "-fopenmp -fdump-tree-gimple -g0 -O2" } */
- /* atomicvar should never be referenced in between the barrier and
-    following #pragma omp atomic_load.  */
- /* { dg-final { scan-tree-dump-not "barrier\[^#\]*atomicvar" "gimple" } } */
- /* { dg-final { cleanup-tree-dump "gimple" } } */
- 
- #include "atomic-11.C"
--- 0 ----
Index: testsuite/g++.dg/gomp/atomic-2.C
===================================================================
*** testsuite/g++.dg/gomp/atomic-2.C    (.../trunk/gcc) (revision 180790)
--- testsuite/g++.dg/gomp/atomic-2.C    (.../branches/cxx-mem-model/gcc)        
(revision 180839)
***************
*** 1,23 ****
- /* { dg-do compile } */
- 
- float x, y;
- 
- void f1(void)
- {
-   #pragma omp atomic
-     x++;
-   #pragma omp atomic
-     x--;
-   #pragma omp atomic
-     ++x;
-   #pragma omp atomic
-     --x;
-   #pragma omp atomic
-     x += 1;
-   #pragma omp atomic
-     x -= y;
-   #pragma omp atomic
-     x *= 3;
-   #pragma omp atomic
-     x /= 3;
- }
--- 0 ----
Index: testsuite/g++.dg/gomp/atomic-13.C
===================================================================
*** testsuite/g++.dg/gomp/atomic-13.C   (.../trunk/gcc) (revision 180790)
--- testsuite/g++.dg/gomp/atomic-13.C   (.../branches/cxx-mem-model/gcc)        
(revision 180839)
***************
*** 1,43 ****
- /* PR middle-end/45423 */
- /* { dg-do compile } */
- /* { dg-options "-fopenmp" } */
- 
- #ifdef __cplusplus
- bool *baz ();
- #else
- _Bool *baz ();
- #endif
- int *bar ();
- 
- int
- foo (void)
- {
-   #pragma omp barrier
-   #pragma omp atomic
-     (*bar ())++;
-   #pragma omp barrier
-   #pragma omp atomic
-     ++(*bar ());
-   #pragma omp barrier
-   #pragma omp atomic
-     (*bar ())--;
-   #pragma omp barrier
-   #pragma omp atomic
-     --(*bar ());
-   #pragma omp barrier
-   #pragma omp atomic
-     (*baz ())++;
-   #pragma omp barrier
-   #pragma omp atomic
-     ++(*baz ());
- #ifndef __cplusplus
-   #pragma omp barrier
-   #pragma omp atomic
-     (*baz ())--;
-   #pragma omp barrier
-   #pragma omp atomic
-     --(*baz ());
-   #pragma omp barrier
- #endif
-   return 0;
- }
--- 0 ----
Index: testsuite/g++.dg/gomp/atomic-3.C
===================================================================
*** testsuite/g++.dg/gomp/atomic-3.C    (.../trunk/gcc) (revision 180790)
--- testsuite/g++.dg/gomp/atomic-3.C    (.../branches/cxx-mem-model/gcc)        
(revision 180839)
***************
*** 1,13 ****
- /* { dg-do compile } */
- /* { dg-options "-fopenmp -fdump-tree-ompexp" } */
- 
- int *xyzzy;
- 
- void f1(void)
- {
-   #pragma omp atomic
-     xyzzy++;
- }
- 
- /* { dg-final { scan-tree-dump-times "xyzzy, 4" 1 "ompexp" { target i?86-*-* 
x86_64-*-* ia64-*-* powerpc*-*-* alpha*-*-* } } } */
- /* { dg-final { cleanup-tree-dump "ompexp" } } */
--- 0 ----
Index: testsuite/g++.dg/gomp/atomic-7.C
===================================================================
*** testsuite/g++.dg/gomp/atomic-7.C    (.../trunk/gcc) (revision 180790)
--- testsuite/g++.dg/gomp/atomic-7.C    (.../branches/cxx-mem-model/gcc)        
(revision 180839)
***************
*** 1,23 ****
- /* { dg-do compile } */
- 
- double x, y;
- 
- void f2(void)
- {
-   #pragma omp atomic
-     y++;
-   #pragma omp atomic
-     y--;
-   #pragma omp atomic
-     ++y;
-   #pragma omp atomic
-     --y;
-   #pragma omp atomic
-     y += 1;
-   #pragma omp atomic
-     y -= x;
-   #pragma omp atomic
-     y *= 3;
-   #pragma omp atomic
-     y /= 3;
- }
--- 0 ----
Index: testsuite/g++.dg/gomp/atomic-10.C
===================================================================
*** testsuite/g++.dg/gomp/atomic-10.C   (.../trunk/gcc) (revision 180790)
--- testsuite/g++.dg/gomp/atomic-10.C   (.../branches/cxx-mem-model/gcc)        
(revision 180839)
***************
*** 1,24 ****
- // PR middle-end/28046
- // { dg-do compile }
- // { dg-options "-fopenmp -fdump-tree-ompexp" }
- 
- int a[3], b;
- struct C { int x; int y; } c;
- 
- int bar (void), *baz (void);
- 
- void
- foo (void)
- {
- #pragma omp atomic
-   a[2] += bar ();
- #pragma omp atomic
-   b += bar ();
- #pragma omp atomic
-   c.y += bar ();
- #pragma omp atomic
-   *baz () += bar ();
- }
- 
- // { dg-final { scan-tree-dump-times "__sync_fetch_and_add" 4 "ompexp" { 
target i?86-*-* x86_64-*-* ia64-*-* powerpc*-*-* alpha*-*-* } } }
- // { dg-final { cleanup-tree-dump "ompexp" } }
--- 0 ----
Index: testsuite/g++.dg/gomp/gomp.exp
===================================================================
*** testsuite/g++.dg/gomp/gomp.exp      (.../trunk/gcc) (revision 180790)
--- testsuite/g++.dg/gomp/gomp.exp      (.../branches/cxx-mem-model/gcc)        
(revision 180839)
*************** if ![check_effective_target_fopenmp] {
*** 27,33 ****
  dg-init
  
  # Main loop.
! dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.C]] "" "-fopenmp"
  
  # All done.
  dg-finish
--- 27,33 ----
  dg-init
  
  # Main loop.
! dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.C 
$srcdir/c-c++-common/gomp/*.c]] "" "-fopenmp"
  
  # All done.
  dg-finish
Index: testsuite/c-c++-common/gomp/atomic-14.c
===================================================================
*** testsuite/c-c++-common/gomp/atomic-14.c     (.../trunk/gcc) (revision 0)
--- testsuite/c-c++-common/gomp/atomic-14.c     
(.../branches/cxx-mem-model/gcc)        (revision 180839)
***************
*** 0 ****
--- 1,43 ----
+ /* PR middle-end/45423 */
+ /* { dg-do compile } */
+ /* { dg-options "-fopenmp" } */
+ 
+ #ifdef __cplusplus
+ bool *baz ();
+ #else
+ _Bool *baz ();
+ #endif
+ int *bar ();
+ 
+ int
+ foo (void)
+ {
+   #pragma omp barrier
+   #pragma omp atomic
+     (*bar ())++;
+   #pragma omp barrier
+   #pragma omp atomic
+     ++(*bar ());
+   #pragma omp barrier
+   #pragma omp atomic
+     (*bar ())--;
+   #pragma omp barrier
+   #pragma omp atomic
+     --(*bar ());
+   #pragma omp barrier
+   #pragma omp atomic
+     (*baz ())++;
+   #pragma omp barrier
+   #pragma omp atomic
+     ++(*baz ());
+ #ifndef __cplusplus
+   #pragma omp barrier
+   #pragma omp atomic
+     (*baz ())--;
+   #pragma omp barrier
+   #pragma omp atomic
+     --(*baz ());
+   #pragma omp barrier
+ #endif
+   return 0;
+ }
Index: testsuite/c-c++-common/gomp/atomic-15.c
===================================================================
*** testsuite/c-c++-common/gomp/atomic-15.c     (.../trunk/gcc) (revision 0)
--- testsuite/c-c++-common/gomp/atomic-15.c     
(.../branches/cxx-mem-model/gcc)        (revision 180839)
***************
*** 0 ****
--- 1,46 ----
+ /* { dg-do compile } */
+ /* { dg-options "-fopenmp" } */
+ 
+ int x = 6;
+ 
+ int
+ main ()
+ {
+   int v;
+   #pragma omp atomic
+     x = x * 7 + 6;    /* { dg-error "expected" } */
+   #pragma omp atomic
+     x = x * 7 ^ 6;    /* { dg-error "expected" } */
+   #pragma omp atomic update
+     x = x - 8 + 6;    /* { dg-error "expected" } */
+   #pragma omp atomic
+     x = x ^ 7 | 2;    /* { dg-error "expected" } */
+   #pragma omp atomic
+     x = x / 7 * 2;    /* { dg-error "expected" } */
+   #pragma omp atomic
+     x = x / 7 / 2;    /* { dg-error "expected" } */
+   #pragma omp atomic capture
+     v = x = x | 6;    /* { dg-error "invalid operator" } */
+   #pragma omp atomic capture
+     { v = x; x = x * 7 + 6; } /* { dg-error "expected" } */
+   #pragma omp atomic capture
+     { v = x; x = x * 7 ^ 6; } /* { dg-error "expected" } */
+   #pragma omp atomic capture
+     { v = x; x = x - 8 + 6; } /* { dg-error "expected" } */
+   #pragma omp atomic capture
+     { v = x; x = x ^ 7 | 2; } /* { dg-error "expected" } */
+   #pragma omp atomic capture
+     { v = x; x = x / 7 * 2; } /* { dg-error "expected" } */
+   #pragma omp atomic capture
+     { v = x; x = x / 7 / 2; } /* { dg-error "expected" } */
+   #pragma omp atomic capture
+     { x = x * 7 + 6; v = x; } /* { dg-error "expected" } */
+   #pragma omp atomic capture
+     { x = x * 7 ^ 6; v = x; } /* { dg-error "expected" } */
+   #pragma omp atomic capture
+     { x = x - 8 + 6; v = x; } /* { dg-error "expected" } */
+   #pragma omp atomic capture
+     { x = x ^ 7 | 2; v = x; } /* { dg-error "expected" } */
+   (void) v;
+   return 0;
+ }
Index: testsuite/c-c++-common/gomp/atomic-7.c
===================================================================
*** testsuite/c-c++-common/gomp/atomic-7.c      (.../trunk/gcc) (revision 0)
--- testsuite/c-c++-common/gomp/atomic-7.c      
(.../branches/cxx-mem-model/gcc)        (revision 180839)
***************
*** 0 ****
--- 1,23 ----
+ /* { dg-do compile } */
+ 
+ double x, y;
+ 
+ void f2(void)
+ {
+   #pragma omp atomic
+     y++;
+   #pragma omp atomic
+     y--;
+   #pragma omp atomic
+     ++y;
+   #pragma omp atomic
+     --y;
+   #pragma omp atomic
+     y += 1;
+   #pragma omp atomic
+     y -= x;
+   #pragma omp atomic
+     y *= 3;
+   #pragma omp atomic
+     y /= 3;
+ }
Index: testsuite/c-c++-common/gomp/atomic-8.c
===================================================================
*** testsuite/c-c++-common/gomp/atomic-8.c      (.../trunk/gcc) (revision 0)
--- testsuite/c-c++-common/gomp/atomic-8.c      
(.../branches/cxx-mem-model/gcc)        (revision 180839)
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do compile } */
+ 
+ long double z;
+ 
+ void f3(void)
+ {
+   #pragma omp atomic
+     z++;
+   #pragma omp atomic
+     z--;
+   #pragma omp atomic
+     ++z;
+   #pragma omp atomic
+     --z;
+   #pragma omp atomic
+     z += 1;
+   #pragma omp atomic
+     z *= 3;
+   #pragma omp atomic
+     z /= 3;
+ }
Index: testsuite/c-c++-common/gomp/atomic-9.c
===================================================================
*** testsuite/c-c++-common/gomp/atomic-9.c      (.../trunk/gcc) (revision 0)
--- testsuite/c-c++-common/gomp/atomic-9.c      
(.../branches/cxx-mem-model/gcc)        (revision 180839)
***************
*** 0 ****
--- 1,14 ----
+ /* { dg-do compile } */
+ /* { dg-options "-fopenmp -fdump-tree-ompexp" } */
+ /* { dg-require-effective-target cas_int } */
+ 
+ volatile int *bar(void);
+ 
+ void f1(void)
+ {
+   #pragma omp atomic
+     *bar() += 1;
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "__atomic_fetch_add" 1 "ompexp" } } */
+ /* { dg-final { cleanup-tree-dump "ompexp" } } */
Index: testsuite/c-c++-common/gomp/atomic-1.c
===================================================================
*** testsuite/c-c++-common/gomp/atomic-1.c      (.../trunk/gcc) (revision 0)
--- testsuite/c-c++-common/gomp/atomic-1.c      
(.../branches/cxx-mem-model/gcc)        (revision 180839)
***************
*** 0 ****
--- 1,99 ----
+ /* { dg-do compile } */
+ 
+ int x;
+ volatile int y;
+ volatile unsigned char z;
+ 
+ void f1(void)
+ {
+   #pragma omp atomic
+     x++;
+   #pragma omp atomic
+     x--;
+   #pragma omp atomic
+     ++x;
+   #pragma omp atomic
+     --x;
+   #pragma omp atomic
+     x += 1;
+   #pragma omp atomic
+     x -= y;
+   #pragma omp atomic
+     x |= 1;
+   #pragma omp atomic
+     x &= 1;
+   #pragma omp atomic
+     x ^= 1;
+   #pragma omp atomic
+     x *= 3;
+   #pragma omp atomic
+     x /= 3;
+   #pragma omp atomic
+     x /= 3;
+   #pragma omp atomic
+     x <<= 3;
+   #pragma omp atomic
+     x >>= 3;
+ }
+ 
+ void f2(void)
+ {
+   #pragma omp atomic
+     y++;
+   #pragma omp atomic
+     y--;
+   #pragma omp atomic
+     ++y;
+   #pragma omp atomic
+     --y;
+   #pragma omp atomic
+     y += 1;
+   #pragma omp atomic
+     y -= x;
+   #pragma omp atomic
+     y |= 1;
+   #pragma omp atomic
+     y &= 1;
+   #pragma omp atomic
+     y ^= 1;
+   #pragma omp atomic
+     y *= 3;
+   #pragma omp atomic
+     y /= 3;
+   #pragma omp atomic
+     y /= 3;
+   #pragma omp atomic
+     y <<= 3;
+   #pragma omp atomic
+     y >>= 3;
+ }
+ 
+ void f3(void)
+ {
+   #pragma omp atomic
+     z++;
+   #pragma omp atomic
+     z--;
+   #pragma omp atomic
+     ++z;
+   #pragma omp atomic
+     --z;
+   #pragma omp atomic
+     z += 1;
+   #pragma omp atomic
+     z |= 1;
+   #pragma omp atomic
+     z &= 1;
+   #pragma omp atomic
+     z ^= 1;
+   #pragma omp atomic
+     z *= 3;
+   #pragma omp atomic
+     z /= 3;
+   #pragma omp atomic
+     z /= 3;
+   #pragma omp atomic
+     z <<= 3;
+   #pragma omp atomic
+     z >>= 3;
+ }
Index: testsuite/c-c++-common/gomp/atomic-10.c
===================================================================
*** testsuite/c-c++-common/gomp/atomic-10.c     (.../trunk/gcc) (revision 0)
--- testsuite/c-c++-common/gomp/atomic-10.c     
(.../branches/cxx-mem-model/gcc)        (revision 180839)
***************
*** 0 ****
--- 1,25 ----
+ /* PR middle-end/28046 */
+ /* { dg-do compile } */
+ /* { dg-options "-fopenmp -fdump-tree-ompexp" } */
+ /* { dg-require-effective-target cas_int } */
+ 
+ int a[3], b;
+ struct C { int x; int y; } c;
+ 
+ int bar (void), *baz (void);
+ 
+ void
+ foo (void)
+ {
+ #pragma omp atomic
+   a[2] += bar ();
+ #pragma omp atomic
+   b += bar ();
+ #pragma omp atomic
+   c.y += bar ();
+ #pragma omp atomic
+   *baz () += bar ();
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "__atomic_fetch_add" 4 "ompexp" } } */
+ /* { dg-final { cleanup-tree-dump "ompexp" } } */
Index: testsuite/c-c++-common/gomp/atomic-2.c
===================================================================
*** testsuite/c-c++-common/gomp/atomic-2.c      (.../trunk/gcc) (revision 0)
--- testsuite/c-c++-common/gomp/atomic-2.c      
(.../branches/cxx-mem-model/gcc)        (revision 180839)
***************
*** 0 ****
--- 1,23 ----
+ /* { dg-do compile } */
+ 
+ float x, y;
+ 
+ void f1(void)
+ {
+   #pragma omp atomic
+     x++;
+   #pragma omp atomic
+     x--;
+   #pragma omp atomic
+     ++x;
+   #pragma omp atomic
+     --x;
+   #pragma omp atomic
+     x += 1;
+   #pragma omp atomic
+     x -= y;
+   #pragma omp atomic
+     x *= 3;
+   #pragma omp atomic
+     x /= 3;
+ }
Index: testsuite/c-c++-common/gomp/atomic-12.c
===================================================================
*** testsuite/c-c++-common/gomp/atomic-12.c     (.../trunk/gcc) (revision 0)
--- testsuite/c-c++-common/gomp/atomic-12.c     
(.../branches/cxx-mem-model/gcc)        (revision 180839)
***************
*** 0 ****
--- 1,306 ----
+ /* PR middle-end/45423 */
+ /* { dg-do compile } */
+ /* { dg-options "-fopenmp -fdump-tree-gimple -g0" } */
+ /* atomicvar should never be referenced in between the barrier and
+    following #pragma omp atomic_load.  */
+ /* { dg-final { scan-tree-dump-not "barrier\[^#\]*atomicvar" "gimple" } } */
+ /* { dg-final { cleanup-tree-dump "gimple" } } */
+ 
+ #ifdef __cplusplus
+ bool atomicvar, c;
+ #else
+ _Bool atomicvar, c;
+ #endif
+ int i, atomicvar2, c2;
+ 
+ int
+ foo (void)
+ {
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar |= -1;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar |= 0;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar |= 1;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar |= 2;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar |= c;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar ^= -1;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar ^= 0;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar ^= 1;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar ^= 2;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar ^= c;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar &= -1;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar &= 0;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar &= 1;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar &= 2;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar &= c;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar += -1;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar += 0;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar += 1;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar += 2;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar += c;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar -= -1;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar -= 0;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar -= 1;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar -= 2;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar -= c;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar *= -1;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar *= 0;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar *= 1;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar *= 2;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar *= c;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar /= -1;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar /= 1;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar /= 2;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar /= c;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar <<= 0;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar <<= 1;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar <<= 2;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar <<= i;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar >>= 0;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar >>= 1;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar >>= 2;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar >>= i;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar++;
+   #pragma omp barrier
+   #pragma omp atomic
+     ++atomicvar;
+   #pragma omp barrier
+ #ifndef __cplusplus
+   #pragma omp atomic
+     atomicvar--;
+   #pragma omp barrier
+   #pragma omp atomic
+     --atomicvar;
+   #pragma omp barrier
+ #endif
+   return 0;
+ }
+ 
+ int
+ bar (void)
+ {
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar2 |= -1;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar2 |= 0;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar2 |= 1;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar2 |= 2;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar2 |= c2;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar2 ^= -1;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar2 ^= 0;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar2 ^= 1;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar2 ^= 2;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar2 ^= c2;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar2 &= -1;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar2 &= 0;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar2 &= 1;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar2 &= 2;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar2 &= c2;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar2 += -1;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar2 += 0;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar2 += 1;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar2 += 2;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar2 += c2;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar2 -= -1;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar2 -= 0;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar2 -= 1;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar2 -= 2;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar2 -= c2;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar2 *= -1;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar2 *= 0;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar2 *= 1;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar2 *= 2;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar2 *= c2;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar2 /= -1;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar2 /= 1;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar2 /= 2;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar2 /= c2;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar2 <<= 0;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar2 <<= 1;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar2 <<= 2;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar2 <<= i;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar2 >>= 0;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar2 >>= 1;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar2 >>= 2;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar2 >>= i;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar2++;
+   #pragma omp barrier
+   #pragma omp atomic
+     ++atomicvar2;
+   #pragma omp barrier
+   #pragma omp atomic
+     atomicvar2--;
+   #pragma omp barrier
+   #pragma omp atomic
+     --atomicvar2;
+   #pragma omp barrier
+   return 0;
+ }
Index: testsuite/c-c++-common/gomp/atomic-3.c
===================================================================
*** testsuite/c-c++-common/gomp/atomic-3.c      (.../trunk/gcc) (revision 0)
--- testsuite/c-c++-common/gomp/atomic-3.c      
(.../branches/cxx-mem-model/gcc)        (revision 180839)
***************
*** 0 ****
--- 1,14 ----
+ /* { dg-do compile } */
+ /* { dg-options "-fopenmp -fdump-tree-ompexp" } */
+ /* { dg-require-effective-target cas_int } */
+ 
+ int *xyzzy;
+ 
+ void f1(void)
+ {
+   #pragma omp atomic
+     xyzzy++;
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "xyzzy, 4" 1 "ompexp" } } */
+ /* { dg-final { cleanup-tree-dump "ompexp" } } */
Index: testsuite/c-c++-common/gomp/atomic-13.c
===================================================================
*** testsuite/c-c++-common/gomp/atomic-13.c     (.../trunk/gcc) (revision 0)
--- testsuite/c-c++-common/gomp/atomic-13.c     
(.../branches/cxx-mem-model/gcc)        (revision 180839)
***************
*** 0 ****
--- 1,9 ----
+ /* PR middle-end/45423 */
+ /* { dg-do compile } */
+ /* { dg-options "-fopenmp -fdump-tree-gimple -g0 -O2" } */
+ /* atomicvar should never be referenced in between the barrier and
+    following #pragma omp atomic_load.  */
+ /* { dg-final { scan-tree-dump-not "barrier\[^#\]*atomicvar" "gimple" } } */
+ /* { dg-final { cleanup-tree-dump "gimple" } } */
+ 
+ #include "atomic-12.c"
Index: testsuite/c-c++-common/gomp/atomic-4.c
===================================================================
*** testsuite/c-c++-common/gomp/atomic-4.c      (.../trunk/gcc) (revision 0)
--- testsuite/c-c++-common/gomp/atomic-4.c      
(.../branches/cxx-mem-model/gcc)        (revision 180839)
***************
*** 0 ****
--- 1,24 ----
+ /* { dg-do compile } */
+ 
+ int a[4];
+ int *p;
+ struct S { int x; int y[4]; } s;
+ int *bar(void);
+ 
+ void f1(void)
+ {
+   #pragma omp atomic
+     a[4] += 1;
+   #pragma omp atomic
+     *p += 1;
+   #pragma omp atomic
+     s.x += 1;
+   #pragma omp atomic
+     s.y[*p] += 1;
+   #pragma omp atomic
+     s.y[*p] *= 42;
+   #pragma omp atomic
+     *bar() += 1;
+   #pragma omp atomic
+     *bar() *= 42;
+ }

Reply via email to