Add fix-it hint for missing return statement in assignment operators (PR c++/85523)
[official-gcc.git] / libgomp / testsuite / libgomp.c++ / member-3.C
blob50bd587d86bb4aef1b319019618eb90ab40dfa56
1 // { dg-do run }
3 struct R { R () {}; ~R () {}; int r; };
4 struct T { T () {}; virtual ~T () {}; int t; };
5 int c;
6 struct A : public R, virtual public T { A () : b(c) {} int a; int &b; void m1 (); };
7 int d[64];
9 void
10 A::m1 ()
12   r = 0;
13   #pragma omp parallel for private (a) reduction(|:R::r)
14   for (a = 0; A::a < 31; a += 2)
15     r |= (1 << A::a);
16   if (r != 0x55555555)
17     __builtin_abort ();
18   #pragma omp parallel for simd linear (R::r)
19   for (R::r = 0; r < 32; R::r++)
20     d[r + 8] |= 1;
21   for (int i = 0; i < 64; i++)
22     if (d[i] != ((i >= 8 && i < 32 + 8) ? 1 : 0))
23       __builtin_abort ();
24   #pragma omp parallel for lastprivate (t)
25   for (T::t = 0; t < 32; t += 3)
26     d[T::t + 2] |= 2;
27   if (T::t != 33)
28     __builtin_abort ();
29   for (int i = 0; i < 64; i++)
30     if (d[i] != (((i >= 8 && i < 32 + 8) ? 1 : 0)
31                  | ((i >= 2 && i < 32 + 2 && (i - 2) % 3 == 0) ? 2 : 0)))
32       __builtin_abort ();
33   #pragma omp simd linear (t)
34   for (t = 0; t < 32; t++)
35     d[T::t + 9] |= 4;
36   if (t != 32)
37     __builtin_abort ();
38   for (int i = 0; i < 64; i++)
39     if (d[i] != (((i >= 8 && i < 32 + 8) ? 1 : 0)
40                  | ((i >= 2 && i < 32 + 2 && (i - 2) % 3 == 0) ? 2 : 0)
41                  | ((i >= 9 && i < 32 + 9) ? 4 : 0)))
42       __builtin_abort ();
43   r = 0;
44   #pragma omp parallel for reduction(|:r)
45   for (a = 0; A::a < 31; a += 2)
46     r |= (1 << A::a);
47   if (r != 0x55555555)
48     __builtin_abort ();
49   #pragma omp parallel for simd
50   for (R::r = 0; r < 32; R::r += 2)
51     d[r + 8] |= 8;
52   for (int i = 0; i < 64; i++)
53     if (d[i] != (((i >= 8 && i < 32 + 8) ? ((i & 1) ? 1 : (8 | 1)) : 0)
54                  | ((i >= 2 && i < 32 + 2 && (i - 2) % 3 == 0) ? 2 : 0)
55                  | ((i >= 9 && i < 32 + 9) ? 4 : 0)))
56       __builtin_abort ();
57   #pragma omp simd collapse(2)
58   for (T::t = 0; t < 7; t += 2)
59     for (a = 0; A::a < 8; a++)
60       d[((t << 2) | a) + 3] |= 16;
61   if (t != 8 || A::a != 8)
62     __builtin_abort ();
63   for (int i = 0; i < 64; i++)
64     if (d[i] != (((i >= 8 && i < 32 + 8) ? ((i & 1) ? 1 : (8 | 1)) : 0)
65                  | ((i >= 2 && i < 32 + 2 && (i - 2) % 3 == 0) ? 2 : 0)
66                  | ((i >= 9 && i < 32 + 9) ? 4 : 0)
67                  | ((i >= 3 && i < 32 + 3) ? 16 : 0)))
68       __builtin_abort ();
69   T::t = 32;
70   a = 16;
71   #pragma omp parallel
72   #pragma omp single
73   #pragma omp taskloop simd collapse(2)
74   for (t = 0; T::t < 7; T::t += 2)
75     for (A::a = 0; a < 8; A::a++)
76       d[((t << 2) | A::a) + 3] |= 32;
77   if (T::t != 8 || a != 8)
78     __builtin_abort ();
79   for (int i = 0; i < 64; i++)
80     if (d[i] != (((i >= 8 && i < 32 + 8) ? ((i & 1) ? 1 : (8 | 1)) : 0)
81                  | ((i >= 2 && i < 32 + 2 && (i - 2) % 3 == 0) ? 2 : 0)
82                  | ((i >= 9 && i < 32 + 9) ? 4 : 0)
83                  | ((i >= 3 && i < 32 + 3) ? (16 | 32) : 0)))
84       __builtin_abort ();
85   #pragma omp parallel
86   #pragma omp single
87   #pragma omp taskloop simd
88   for (R::r = 0; r < 31; R::r += 2)
89     d[r + 8] |= 64;
90   if (r != 32)
91     __builtin_abort ();
92   for (int i = 0; i < 64; i++)
93     if (d[i] != (((i >= 8 && i < 32 + 8) ? ((i & 1) ? 1 : (64 | 8 | 1)) : 0)
94                  | ((i >= 2 && i < 32 + 2 && (i - 2) % 3 == 0) ? 2 : 0)
95                  | ((i >= 9 && i < 32 + 9) ? 4 : 0)
96                  | ((i >= 3 && i < 32 + 3) ? (16 | 32) : 0)))
97       __builtin_abort ();
101 main ()
103   A a;
104   a.m1 ();