111
|
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 {
|
145
|
63 #pragma omp parallel private (h) // { dg-error "may appear only in .shared. or .firstprivate. clauses" }
|
111
|
64 ;
|
|
65 #pragma omp parallel firstprivate (h)
|
|
66 ;
|
145
|
67 #pragma omp parallel for lastprivate (h) // { dg-error "may appear only in .shared. or .firstprivate. clauses" }
|
111
|
68 for (int i = 0; i < 10; i++)
|
|
69 ;
|
145
|
70 #pragma omp simd linear (h : 1) // { dg-error "may appear only in .shared. or .firstprivate. clauses" }
|
111
|
71 for (int i = 0; i < 10; i++)
|
|
72 ;
|
145
|
73 #pragma omp parallel for reduction (+:h) // { dg-error "may appear only in .shared. or .firstprivate. clauses" }
|
111
|
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 ;
|
|
79 #pragma omp parallel shared (a)
|
|
80 ;
|
|
81 #pragma omp parallel shared (b)
|
|
82 ;
|
|
83 #pragma omp parallel shared (c)
|
|
84 ;
|
|
85 #pragma omp parallel shared (e)
|
|
86 ;
|
|
87 #pragma omp parallel shared (f)
|
|
88 ;
|
|
89 #pragma omp parallel shared (g)
|
|
90 ;
|
145
|
91 #pragma omp parallel shared (h)
|
111
|
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 {
|
145
|
121 #pragma omp parallel private (a) // { dg-error "may appear only in .shared. or .firstprivate. clauses" }
|
111
|
122 ;
|
|
123 #pragma omp parallel firstprivate (a)
|
|
124 ;
|
145
|
125 #pragma omp parallel for lastprivate (a) // { dg-error "may appear only in .shared. or .firstprivate. clauses" }
|
111
|
126 for (int i = 0; i < 10; i++)
|
|
127 ;
|
145
|
128 #pragma omp simd linear (a : 1) // { dg-error "may appear only in .shared. or .firstprivate. clauses" }
|
111
|
129 for (int i = 0; i < 10; i++)
|
|
130 ;
|
145
|
131 #pragma omp parallel for reduction (+:a) // { dg-error "may appear only in .shared. or .firstprivate. clauses" }
|
111
|
132 for (int i = 0; i < 10; i++)
|
|
133 ;
|
145
|
134 #pragma omp parallel private (h) // { dg-error "may appear only in .shared. or .firstprivate. clauses" }
|
111
|
135 ;
|
|
136 #pragma omp parallel firstprivate (h)
|
|
137 ;
|
145
|
138 #pragma omp parallel for lastprivate (h) // { dg-error "may appear only in .shared. or .firstprivate. clauses" }
|
111
|
139 for (int i = 0; i < 10; i++)
|
|
140 ;
|
145
|
141 #pragma omp simd linear (h : 1) // { dg-error "may appear only in .shared. or .firstprivate. clauses" }
|
111
|
142 for (int i = 0; i < 10; i++)
|
|
143 ;
|
145
|
144 #pragma omp parallel for reduction (+:h) // { dg-error "may appear only in .shared. or .firstprivate. clauses" }
|
111
|
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 ;
|
145
|
153 #pragma omp parallel shared (a)
|
111
|
154 ;
|
|
155 #pragma omp parallel shared (b)
|
|
156 ;
|
|
157 #pragma omp parallel shared (c)
|
|
158 ;
|
|
159 #pragma omp parallel shared (e)
|
|
160 ;
|
|
161 #pragma omp parallel shared (f)
|
|
162 ;
|
|
163 #pragma omp parallel shared (g)
|
|
164 ;
|
145
|
165 #pragma omp parallel shared (h)
|
111
|
166 ;
|
|
167 return 0;
|
|
168 }
|