]>
Commit | Line | Data |
---|---|---|
43895be5 | 1 | // { dg-do compile } |
2 | // { dg-options "-fopenmp" } | |
3 | ||
4 | int d; | |
5 | ||
6 | struct A | |
7 | { | |
8 | A () : a(2), b(3), c(d) {} | |
9 | A (int x) : a(2), b(x), c(d) {} | |
10 | int a; | |
11 | A (const A &); | |
12 | A &operator= (const A &); | |
13 | const A &operator= (const A &) const; | |
14 | mutable int b; | |
15 | int &c; | |
16 | }; | |
17 | ||
18 | struct B : public A | |
19 | { | |
20 | B () : h(5) {} | |
21 | ~B (); | |
22 | B (const B &); | |
23 | A e; | |
24 | mutable A f; | |
25 | const A g; | |
26 | const int h; | |
27 | int m1 (); | |
28 | int m2 (); | |
29 | int m3 () const; | |
30 | int m4 () const; | |
31 | }; | |
32 | ||
33 | void foo (A &); | |
34 | ||
35 | #pragma omp declare reduction (+:A:omp_out.b += omp_in.b) initializer (foo (omp_priv)) | |
36 | ||
37 | int | |
38 | B::m1 () | |
39 | { | |
40 | #pragma omp parallel private (a, b, c, e, f, g) | |
41 | ; | |
42 | #pragma omp parallel firstprivate (a, b, c, e, f, g) | |
43 | ; | |
44 | #pragma omp parallel for lastprivate (a, b, c, e, f, g) | |
45 | for (int i = 0; i < 10; i++) | |
46 | ; | |
47 | #pragma omp simd linear (a, b, c : 1) | |
48 | for (int i = 0; i < 10; i++) | |
49 | { | |
50 | a++; | |
51 | b++; | |
52 | c++; | |
53 | } | |
54 | #pragma omp parallel for reduction (+:a, b, c, e, f) | |
55 | for (int i = 0; i < 10; i++) | |
56 | ; | |
57 | return 0; | |
58 | } | |
59 | ||
60 | int | |
61 | B::m2 () | |
62 | { | |
7e5a76c8 | 63 | #pragma omp parallel private (h) // { dg-error "may appear only in .shared. or .firstprivate. clauses" } |
43895be5 | 64 | ; |
65 | #pragma omp parallel firstprivate (h) | |
66 | ; | |
7e5a76c8 | 67 | #pragma omp parallel for lastprivate (h) // { dg-error "may appear only in .shared. or .firstprivate. clauses" } |
43895be5 | 68 | for (int i = 0; i < 10; i++) |
69 | ; | |
7e5a76c8 | 70 | #pragma omp simd linear (h : 1) // { dg-error "may appear only in .shared. or .firstprivate. clauses" } |
43895be5 | 71 | for (int i = 0; i < 10; i++) |
72 | ; | |
7e5a76c8 | 73 | #pragma omp parallel for reduction (+:h) // { dg-error "may appear only in .shared. or .firstprivate. clauses" } |
43895be5 | 74 | for (int i = 0; i < 10; i++) |
75 | ; | |
76 | #pragma omp parallel for reduction (+:g) // { dg-error "has const type for .reduction." } | |
77 | for (int i = 0; i < 10; i++) | |
78 | ; | |
9561765e | 79 | #pragma omp parallel shared (a) |
43895be5 | 80 | ; |
9561765e | 81 | #pragma omp parallel shared (b) |
43895be5 | 82 | ; |
9561765e | 83 | #pragma omp parallel shared (c) |
43895be5 | 84 | ; |
9561765e | 85 | #pragma omp parallel shared (e) |
43895be5 | 86 | ; |
9561765e | 87 | #pragma omp parallel shared (f) |
43895be5 | 88 | ; |
9561765e | 89 | #pragma omp parallel shared (g) |
43895be5 | 90 | ; |
7e5a76c8 | 91 | #pragma omp parallel shared (h) |
43895be5 | 92 | ; |
93 | return 0; | |
94 | } | |
95 | ||
96 | int | |
97 | B::m3 () const | |
98 | { | |
99 | #pragma omp parallel private (b, c, e, f, g) | |
100 | ; | |
101 | #pragma omp parallel firstprivate (b, c, e, f, g) | |
102 | ; | |
103 | #pragma omp parallel for lastprivate (b, c, e, f, g) | |
104 | for (int i = 0; i < 10; i++) | |
105 | ; | |
106 | #pragma omp simd linear (b, c : 1) | |
107 | for (int i = 0; i < 10; i++) | |
108 | { | |
109 | b++; | |
110 | c++; | |
111 | } | |
112 | #pragma omp parallel for reduction (+:b, c, f) | |
113 | for (int i = 0; i < 10; i++) | |
114 | ; | |
115 | return 0; | |
116 | } | |
117 | ||
118 | int | |
119 | B::m4 () const | |
120 | { | |
7e5a76c8 | 121 | #pragma omp parallel private (a) // { dg-error "may appear only in .shared. or .firstprivate. clauses" } |
43895be5 | 122 | ; |
123 | #pragma omp parallel firstprivate (a) | |
124 | ; | |
7e5a76c8 | 125 | #pragma omp parallel for lastprivate (a) // { dg-error "may appear only in .shared. or .firstprivate. clauses" } |
43895be5 | 126 | for (int i = 0; i < 10; i++) |
127 | ; | |
7e5a76c8 | 128 | #pragma omp simd linear (a : 1) // { dg-error "may appear only in .shared. or .firstprivate. clauses" } |
43895be5 | 129 | for (int i = 0; i < 10; i++) |
130 | ; | |
7e5a76c8 | 131 | #pragma omp parallel for reduction (+:a) // { dg-error "may appear only in .shared. or .firstprivate. clauses" } |
43895be5 | 132 | for (int i = 0; i < 10; i++) |
133 | ; | |
7e5a76c8 | 134 | #pragma omp parallel private (h) // { dg-error "may appear only in .shared. or .firstprivate. clauses" } |
43895be5 | 135 | ; |
136 | #pragma omp parallel firstprivate (h) | |
137 | ; | |
7e5a76c8 | 138 | #pragma omp parallel for lastprivate (h) // { dg-error "may appear only in .shared. or .firstprivate. clauses" } |
43895be5 | 139 | for (int i = 0; i < 10; i++) |
140 | ; | |
7e5a76c8 | 141 | #pragma omp simd linear (h : 1) // { dg-error "may appear only in .shared. or .firstprivate. clauses" } |
43895be5 | 142 | for (int i = 0; i < 10; i++) |
143 | ; | |
7e5a76c8 | 144 | #pragma omp parallel for reduction (+:h) // { dg-error "may appear only in .shared. or .firstprivate. clauses" } |
43895be5 | 145 | for (int i = 0; i < 10; i++) |
146 | ; | |
147 | #pragma omp parallel for reduction (+:e) // { dg-error "has const type for .reduction." } | |
148 | for (int i = 0; i < 10; i++) | |
149 | ; | |
150 | #pragma omp parallel for reduction (+:g) // { dg-error "has const type for .reduction." } | |
151 | for (int i = 0; i < 10; i++) | |
152 | ; | |
7e5a76c8 | 153 | #pragma omp parallel shared (a) |
43895be5 | 154 | ; |
9561765e | 155 | #pragma omp parallel shared (b) |
43895be5 | 156 | ; |
9561765e | 157 | #pragma omp parallel shared (c) |
43895be5 | 158 | ; |
9561765e | 159 | #pragma omp parallel shared (e) |
43895be5 | 160 | ; |
9561765e | 161 | #pragma omp parallel shared (f) |
43895be5 | 162 | ; |
9561765e | 163 | #pragma omp parallel shared (g) |
43895be5 | 164 | ; |
7e5a76c8 | 165 | #pragma omp parallel shared (h) |
43895be5 | 166 | ; |
167 | return 0; | |
168 | } |