|  | #include <omp.h> | 
|  | extern "C" void *memset (void *, int, __SIZE_TYPE__); | 
|  | extern "C" void abort (void); | 
|  |  | 
|  | int e; | 
|  |  | 
|  | void | 
|  | baz (int i, int *p, int j, int *q) | 
|  | { | 
|  | if (p[0] != 1 || p[i] != 3 || q[0] != 2 || q[j] != 4) | 
|  | #pragma omp atomic | 
|  | e++; | 
|  | } | 
|  |  | 
|  | void | 
|  | foo (int i, int j) | 
|  | { | 
|  | int p[i + 1]; | 
|  | int q[j + 1]; | 
|  | memset (p, 0, sizeof (p)); | 
|  | memset (q, 0, sizeof (q)); | 
|  | p[0] = 1; | 
|  | p[i] = 3; | 
|  | q[0] = 2; | 
|  | q[j] = 4; | 
|  | #pragma omp task firstprivate (p, q) | 
|  | baz (i, p, j, q); | 
|  | } | 
|  |  | 
|  | int | 
|  | main () | 
|  | { | 
|  | #pragma omp parallel num_threads (4) | 
|  | foo (5 + omp_get_thread_num (), 7 + omp_get_thread_num ()); | 
|  | if (e) | 
|  | abort (); | 
|  | } |