pr26943-3.c revision 1.1.1.1
1/* PR c++/26943 */ 2/* { dg-do run } */ 3 4extern int omp_set_dynamic (int); 5extern int omp_get_thread_num (void); 6extern void abort (void); 7 8int a = 8, b = 12, c = 16, d = 20, j = 0, l = 0; 9char e[10] = "a", f[10] = "b", g[10] = "c", h[10] = "d"; 10volatile int k; 11 12int 13main (void) 14{ 15 int i; 16 omp_set_dynamic (0); 17 omp_set_nested (1); 18#pragma omp parallel num_threads (2) reduction (+:l) 19 if (k == omp_get_thread_num ()) 20 { 21#pragma omp parallel for shared (a, e) firstprivate (b, f) \ 22 lastprivate (c, g) private (d, h) \ 23 schedule (static, 1) num_threads (4) \ 24 reduction (+:j) 25 for (i = 0; i < 4; i++) 26 { 27 if (a != 8 || b != 12 || e[0] != 'a' || f[0] != 'b') 28 j++; 29#pragma omp barrier 30#pragma omp atomic 31 a += i; 32 b += i; 33 c = i; 34 d = i; 35#pragma omp atomic 36 e[0] += i; 37 f[0] += i; 38 g[0] = 'g' + i; 39 h[0] = 'h' + i; 40#pragma omp barrier 41 if (a != 8 + 6 || b != 12 + i || c != i || d != i) 42 j += 8; 43 if (e[0] != 'a' + 6 || f[0] != 'b' + i || g[0] != 'g' + i) 44 j += 64; 45 if (h[0] != 'h' + i) 46 j += 512; 47 } 48 if (j || a != 8 + 6 || b != 12 || c != 3 || d != 20) 49 ++l; 50 if (e[0] != 'a' + 6 || f[0] != 'b' || g[0] != 'g' + 3 || h[0] != 'd') 51 l += 8; 52 } 53 if (l) 54 abort (); 55 return 0; 56} 57