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;
+ }