1 /* PR middle-end/35130 */ 2 3 extern void abort (void); 4 5 void f1(void)6f1 (void) 7 { 8 int a[4], k; 9 void nested (int x) 10 { 11 a[x] = 42; 12 } 13 14 for (k = 0; k < 4; k++) 15 a[k] = 0; 16 #pragma omp parallel for 17 for (k = 0; k < 4; k++) 18 nested (k); 19 20 if (a[0] != 42 || a[1] != 42 || a[2] != 42 || a[3] != 42) 21 abort (); 22 } 23 24 void f2(void)25f2 (void) 26 { 27 int a[4], k; 28 void nested (void) 29 { 30 int l; 31 void nested2 (int x) 32 { 33 a[x] = 42; 34 } 35 #pragma omp parallel for 36 for (l = 0; l < 4; l++) 37 nested2 (l); 38 } 39 40 for (k = 0; k < 4; k++) 41 a[k] = 0; 42 43 nested (); 44 45 if (a[0] != 42 || a[1] != 42 || a[2] != 42 || a[3] != 42) 46 abort (); 47 } 48 49 void f3(void)50f3 (void) 51 { 52 int a[4], b[4], c[4], k; 53 void nested (int x) 54 { 55 a[x] = b[x] = c[x] = 42; 56 } 57 58 for (k = 0; k < 4; k++) 59 a[k] = b[k] = c[k] = 0; 60 nested (0); 61 62 #pragma omp parallel 63 { 64 #pragma omp single 65 { 66 a[1] = 43; 67 b[1] = 43; 68 } 69 #pragma omp parallel 70 { 71 #pragma omp single 72 { 73 b[2] = 44; 74 c[2] = 44; 75 } 76 } 77 } 78 79 if (a[0] != 42 || a[1] != 43 || a[2] != 0 || a[3] != 0) 80 abort (); 81 if (b[0] != 42 || b[1] != 43 || b[2] != 44 || b[3] != 0) 82 abort (); 83 if (c[0] != 42 || c[1] != 0 || c[2] != 44 || c[3] != 0) 84 abort (); 85 } 86 87 void f4(void)88f4 (void) 89 { 90 int a[4], b[4], c[4], k; 91 void nested () 92 { 93 #pragma omp parallel 94 { 95 #pragma omp single 96 { 97 a[1] = 43; 98 b[1] = 43; 99 } 100 #pragma omp parallel 101 { 102 #pragma omp single 103 { 104 b[2] = 44; 105 c[2] = 44; 106 } 107 } 108 } 109 } 110 111 for (k = 0; k < 4; k++) 112 a[k] = b[k] = c[k] = k == 0 ? 42 : 0; 113 nested (); 114 115 if (a[0] != 42 || a[1] != 43 || a[2] != 0 || a[3] != 0) 116 abort (); 117 if (b[0] != 42 || b[1] != 43 || b[2] != 44 || b[3] != 0) 118 abort (); 119 if (c[0] != 42 || c[1] != 0 || c[2] != 44 || c[3] != 0) 120 abort (); 121 } 122 123 int main(void)124main (void) 125 { 126 f1 (); 127 f2 (); 128 f3 (); 129 f4 (); 130 return 0; 131 } 132