summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.dg/gomp/_Atomic-1.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/gcc.dg/gomp/_Atomic-1.c')
-rw-r--r--gcc/testsuite/gcc.dg/gomp/_Atomic-1.c103
1 files changed, 103 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/gomp/_Atomic-1.c b/gcc/testsuite/gcc.dg/gomp/_Atomic-1.c
new file mode 100644
index 00000000000..1f784524f67
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/gomp/_Atomic-1.c
@@ -0,0 +1,103 @@
+/* PR c/65467 */
+/* { dg-do compile } */
+/* { dg-additional-options "-std=c11" } */
+
+_Atomic int t;
+#pragma omp threadprivate (t)
+
+void
+foo (void)
+{
+ _Atomic int a = 4, b = 0, c, d = 3, e;
+ a++;
+ #pragma omp parallel sections num_threads (a) shared (b) private (c) firstprivate (d) lastprivate (e)
+ {
+ #pragma omp section
+ {
+ a++;
+ b++;
+ c = 5;
+ c++;
+ d++;
+ e = 9;
+ e++;
+ }
+ #pragma omp section
+ {
+ a++;
+ b++;
+ c = 5;
+ c++;
+ d++;
+ e = 3;
+ e++;
+ }
+ }
+ e++;
+ t++;
+ #pragma omp parallel copyin (t) private (e)
+ {
+ t++;
+ e = t;
+ #pragma omp single copyprivate (e)
+ {
+ e++;
+ }
+ e++;
+ }
+}
+
+void
+bar (void)
+{
+ int a[4];
+ _Atomic int b = 1, c = 2, f = 8, g = 8, h = 0;
+ _Atomic int d, e[3];
+ int *_Atomic p;
+ _Atomic int *_Atomic q;
+ int i, j;
+ p = a;
+ q = e;
+ #pragma omp target teams map (tofrom: a[b:c]) num_teams (b) thread_limit (c)
+ a[1]++;
+ #pragma omp target device(h)
+ ;
+ #pragma omp task depend (inout: a[b:c])
+ ;
+ #pragma omp task depend (out: d, e[b:c]) priority (b)
+ ;
+ #pragma omp task depend (out: p[b:c])
+ ;
+ #pragma omp task depend (out: q[b:c])
+ ;
+ #pragma omp taskloop num_tasks (c)
+ for (i = 0; i < 16; i++)
+ ;
+ #pragma omp taskloop grainsize (c)
+ for (i = 0; i < 16; i++)
+ ;
+ #pragma omp parallel for schedule (dynamic, b)
+ for (i = 0; i < 16; i++)
+ ;
+ j = 0;
+ #pragma omp simd linear(j:b)
+ for (i = 0; i < 16; i++)
+ j += b;
+ j = 4;
+ #pragma omp atomic read
+ b = j;
+ #pragma omp atomic write
+ j = c;
+ #pragma omp atomic
+ j += c;
+ #pragma omp atomic capture
+ b = j += c;
+ #pragma omp atomic capture
+ b = ++j;
+ #pragma omp atomic capture
+ { b = j; j = c; }
+ #pragma omp atomic capture
+ { b = j; j++; }
+ #pragma omp atomic capture
+ { j *= c; b = j; }
+}