1 // { dg-do compile } 2 // { dg-options "-fopenmp" } 3 4 struct S 5 { 6 #pragma omp declare simd linear(this) // { dg-error "is not an function argument" } 7 static void foo (); 8 void bar (); 9 }; 10 11 void bar()12S::bar () 13 { 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 } 33 } 34 35 template <int N> 36 struct T 37 { 38 #pragma omp declare simd linear(this) // { dg-error "is not an function argument" } 39 static void foo (); 40 void bar (); 41 }; 42 43 template <int N> 44 void bar()45T<N>::bar () 46 { 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 } 66 } 67 68 template struct T<0>; 69