| extern void abort (void); | |
| int | |
| f1 (void) | |
| { | |
| int a = 6, e = 0; | |
| int nested (int x) | |
| { | |
| return x + a; | |
| } | |
| #pragma omp task | |
| { | |
| int n = nested (5); | |
| if (n != 11) | |
| #pragma omp atomic | |
| e += 1; | |
| } | |
| #pragma omp taskwait | |
| return e; | |
| } | |
| int | |
| f2 (void) | |
| { | |
| int a = 6, e = 0; | |
| int nested (int x) | |
| { | |
| return x + a; | |
| } | |
| a = nested (4); | |
| #pragma omp task | |
| { | |
| if (a != 10) | |
| #pragma omp atomic | |
| e += 1; | |
| } | |
| #pragma omp taskwait | |
| return e; | |
| } | |
| int | |
| main (void) | |
| { | |
| int e = 0; | |
| #pragma omp parallel num_threads(4) reduction(+:e) | |
| { | |
| e += f1 (); | |
| e += f2 (); | |
| } | |
| if (e) | |
| abort (); | |
| return 0; | |
| } |