| // { dg-do run } |
| |
| #include <omp.h> |
| |
| __attribute__((noinline, noclone)) void |
| foo (int &a, short &d, char &g) |
| { |
| unsigned long b = 12; |
| unsigned long &c = b; |
| long long e = 21; |
| long long &f = e; |
| unsigned int h = 12; |
| unsigned int &k = h; |
| #pragma omp parallel default(none) private(a, c) firstprivate(d, f) shared(g, k) |
| { |
| int i = omp_get_thread_num (); |
| a = i; |
| c = 2 * i; |
| if (d != 27 || f != 21) |
| __builtin_abort (); |
| d = 3 * (i & 0xfff); |
| f = 4 * i; |
| #pragma omp barrier |
| if (a != i || c != 2 * i || d != 3 * (i & 0xfff) || f != 4 * i) |
| __builtin_abort (); |
| #pragma omp for lastprivate(g, k) |
| for (int j = 0; j < 32; j++) |
| { |
| g = j; |
| k = 3 * j; |
| } |
| } |
| if (g != 31 || k != 31 * 3) |
| __builtin_abort (); |
| #pragma omp parallel for firstprivate (g, k) lastprivate (g, k) |
| for (int j = 0; j < 32; j++) |
| { |
| if (g != 31 || k != 31 * 3) |
| __builtin_abort (); |
| if (j == 31) |
| { |
| g = 29; |
| k = 138; |
| } |
| } |
| if (g != 29 || k != 138) |
| __builtin_abort (); |
| } |
| |
| int |
| main () |
| { |
| int a = 5; |
| short d = 27; |
| char g = ' '; |
| foo (a, d, g); |
| } |