1 // { dg-do run } 2 RR3struct R { R () {}; ~R () {}; int r; }; TT4struct T { T () {}; virtual ~T () {}; int t; }; 5 int c; AA6struct A : public R, virtual public T { A () : b(c) {} int a; int &b; void m1 (); }; 7 int d[64]; 8 9 void m1()10A::m1 () 11 { 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 (); 98 } 99 100 int main()101main () 102 { 103 A a; 104 a.m1 (); 105 } 106