PR middle-end/77674
[official-gcc.git] / gcc / testsuite / g++.dg / gomp / this-1.C
blob0e2dd8caa23ead7306df9135268d4a523071d861
1 // { dg-do compile }
2 // { dg-options "-fopenmp" }
4 struct S
6   #pragma omp declare simd linear(this)         // { dg-error "is not an function argument" }
7   static void foo ();
8   void bar ();
9 };
11 void
12 S::bar ()
14   #pragma omp parallel firstprivate (this)      // { dg-error ".this. allowed in OpenMP only in .declare simd. clauses" }
15     ;
16   #pragma omp parallel for lastprivate (this)   // { dg-error ".this. allowed in OpenMP only in .declare simd. clauses" }
17   for (int i = 0; i < 10; i++)
18     ;
19   #pragma omp parallel shared (this)            // { dg-error ".this. allowed in OpenMP only in .declare simd. clauses" }
20     ;
21   #pragma omp for linear (this)                 // { dg-error ".this. allowed in OpenMP only in .declare simd. clauses" }
22   for (int i = 0; i < 10; i++)
23     ;
24   #pragma omp task depend(inout: this)          // { dg-error ".this. allowed in OpenMP only in .declare simd. clauses" }
25     ;
26   #pragma omp task depend(inout: this[0])       // { dg-error ".this. allowed in OpenMP only in .declare simd. clauses" }
27     ;
28   #pragma omp parallel private (this)           // { dg-error ".this. allowed in OpenMP only in .declare simd. clauses" }
29   {
30     #pragma omp single copyprivate (this)       // { dg-error ".this. allowed in OpenMP only in .declare simd. clauses" }
31     ;
32   }
35 template <int N>
36 struct T
38   #pragma omp declare simd linear(this)         // { dg-error "is not an function argument" }
39   static void foo ();
40   void bar ();
43 template <int N>
44 void
45 T<N>::bar ()
47   #pragma omp parallel firstprivate (this)      // { dg-error ".this. allowed in OpenMP only in .declare simd. clauses" }
48     ;
49   #pragma omp parallel for lastprivate (this)   // { dg-error ".this. allowed in OpenMP only in .declare simd. clauses" }
50   for (int i = 0; i < 10; i++)
51     ;
52   #pragma omp parallel shared (this)            // { dg-error ".this. allowed in OpenMP only in .declare simd. clauses" }
53     ;
54   #pragma omp for linear (this)                 // { dg-error ".this. allowed in OpenMP only in .declare simd. clauses" }
55   for (int i = 0; i < 10; i++)
56     ;
57   #pragma omp task depend(inout: this)          // { dg-error ".this. allowed in OpenMP only in .declare simd. clauses" }
58     ;
59   #pragma omp task depend(inout: this[0])       // { dg-error ".this. allowed in OpenMP only in .declare simd. clauses" }
60     ;
61   #pragma omp parallel private (this)           // { dg-error ".this. allowed in OpenMP only in .declare simd. clauses" }
62   {
63     #pragma omp single copyprivate (this)       // { dg-error ".this. allowed in OpenMP only in .declare simd. clauses" }
64     ;
65   }
68 template struct T<0>;