/* PR c/65467 */ /* { dg-do compile } */ /* { dg-additional-options "-std=c11" } */ void f1 (void) { _Atomic int i = 0, k[4]; int j = 0; k[0] = 0; k[1] = 0; k[2] = 0; k[3] = 0; #pragma omp parallel reduction (+:i) /* { dg-error "'_Atomic' 'i' in 'reduction' clause" } */ i++; #pragma omp declare reduction (foo: _Atomic int: omp_out += omp_in) initializer (omp_priv = omp_orig * 0) /* { dg-error "'_Atomic' qualified type in '#pragma omp declare reduction'" } */ #pragma omp declare reduction (bar: int: omp_out += omp_in) initializer (omp_priv = omp_orig * 0) #pragma omp parallel reduction (bar:j) j++; #pragma omp parallel reduction (bar:i) /* { dg-error "'_Atomic' 'i' in 'reduction' clause" } */ i++; #pragma omp parallel reduction (+:k) /* { dg-error "'_Atomic' 'k' in 'reduction' clause" } */ k[1]++; #pragma omp parallel reduction (+:k[1:2]) /* { dg-error "'_Atomic' \[^\n\r]* in 'reduction' clause" } */ k[1]++; } void f2 (int *_Atomic p) { #pragma omp simd aligned (p : 16) /* { dg-error "'_Atomic' 'p' in 'aligned' clause" } */ for (int i = 0; i < 16; i++) p[i]++; } _Atomic int x; void f3 (_Atomic int *p) { int i; #pragma omp atomic write x = 6; /* { dg-error "'_Atomic' expression in '#pragma omp atomic'" } */ #pragma omp atomic read i = x; /* { dg-error "'_Atomic' expression in '#pragma omp atomic'" } */ #pragma omp atomic update x += 6; /* { dg-error "'_Atomic' expression in '#pragma omp atomic'" } */ #pragma omp atomic capture i = x *= 2; /* { dg-error "'_Atomic' expression in '#pragma omp atomic'" } */ #pragma omp atomic write p[2] = 6; /* { dg-error "'_Atomic' expression in '#pragma omp atomic'" } */ #pragma omp atomic read i = p[2]; /* { dg-error "'_Atomic' expression in '#pragma omp atomic'" } */ #pragma omp atomic update p[2] += 6; /* { dg-error "'_Atomic' expression in '#pragma omp atomic'" } */ #pragma omp atomic capture i = p[2] *= 2; /* { dg-error "'_Atomic' expression in '#pragma omp atomic'" } */ } #pragma omp declare simd linear(x:1) /* { dg-error "'_Atomic' 'x' in 'linear' clause" } */ int f4 (_Atomic int x, int y) { return x + y; }