2018-10-23 Richard Biener <rguenther@suse.de>
[official-gcc.git] / gcc / testsuite / g++.dg / gomp / member-2.C
blobc51fa2063b2d4bbca0476fa5ab79b32303ae8678
1 // { dg-do compile }
2 // { dg-options "-fopenmp" }
4 int d;
6 struct A
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;
18 struct B : public A
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;
33 void foo (A &);
35 #pragma omp declare reduction (+:A:omp_out.b += omp_in.b) initializer (foo (omp_priv))
37 int
38 B::m1 ()
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;
60 int
61 B::m2 ()
63   #pragma omp parallel private (h)      // { dg-error "is predetermined .shared. for .private." }
64     ;
65   #pragma omp parallel firstprivate (h)
66     ;
67   #pragma omp parallel for lastprivate (h)      // { dg-error "is predetermined .shared. for .lastprivate." }
68     for (int i = 0; i < 10; i++)
69       ;
70   #pragma omp simd linear (h : 1)       // { dg-error "is predetermined .shared. for .linear." }
71     for (int i = 0; i < 10; i++)
72       ;
73   #pragma omp parallel for reduction (+:h)      // { dg-error "is predetermined .shared. for .reduction." }
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     ;
91   #pragma omp parallel shared (h)       // { dg-error "is predetermined .shared. for .shared." }
92     ;
93   return 0;
96 int
97 B::m3 () const
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;
119 B::m4 () const
121   #pragma omp parallel private (a)      // { dg-error "is predetermined .shared. for .private." }
122     ;
123   #pragma omp parallel firstprivate (a)
124     ;
125   #pragma omp parallel for lastprivate (a)      // { dg-error "is predetermined .shared. for .lastprivate." }
126     for (int i = 0; i < 10; i++)
127       ;
128   #pragma omp simd linear (a : 1)       // { dg-error "is predetermined .shared. for .linear." }
129     for (int i = 0; i < 10; i++)
130       ;
131   #pragma omp parallel for reduction (+:a)      // { dg-error "is predetermined .shared. for .reduction." }
132     for (int i = 0; i < 10; i++)
133       ;
134   #pragma omp parallel private (h)      // { dg-error "is predetermined .shared. for .private." }
135     ;
136   #pragma omp parallel firstprivate (h)
137     ;
138   #pragma omp parallel for lastprivate (h)      // { dg-error "is predetermined .shared. for .lastprivate." }
139     for (int i = 0; i < 10; i++)
140       ;
141   #pragma omp simd linear (h : 1)       // { dg-error "is predetermined .shared. for .linear." }
142     for (int i = 0; i < 10; i++)
143       ;
144   #pragma omp parallel for reduction (+:h)      // { dg-error "is predetermined .shared. for .reduction." }
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       ;
153   #pragma omp parallel shared (a)       // { dg-error "is predetermined .shared. for .shared." }
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     ;
165   #pragma omp parallel shared (h)       // { dg-error "is predetermined .shared. for .shared." }
166     ;
167   return 0;