|  | #include <stdio.h> | 
|  | #include <omp.h> | 
|  |  | 
|  | extern void abort (void); | 
|  |  | 
|  | void | 
|  | parallel (int a, int b) | 
|  | { | 
|  | int bad, LASTPRIV, LASTPRIV_SEC; | 
|  | int i; | 
|  |  | 
|  | a = b = 3; | 
|  |  | 
|  | bad = 0; | 
|  |  | 
|  | #pragma omp parallel firstprivate (a,b) shared (bad) num_threads (5) | 
|  | { | 
|  | if (a != 3 || b != 3) | 
|  | bad = 1; | 
|  |  | 
|  | #pragma omp for lastprivate (LASTPRIV) | 
|  | for (i = 0; i < 10; i++) | 
|  | LASTPRIV = i; | 
|  |  | 
|  | #pragma omp sections lastprivate (LASTPRIV_SEC) | 
|  | { | 
|  | #pragma omp section | 
|  | { LASTPRIV_SEC = 3; } | 
|  |  | 
|  | #pragma omp section | 
|  | { LASTPRIV_SEC = 42; } | 
|  | } | 
|  |  | 
|  | } | 
|  |  | 
|  | if (LASTPRIV != 9) | 
|  | abort (); | 
|  |  | 
|  | if (LASTPRIV_SEC != 42) | 
|  | abort (); | 
|  |  | 
|  | if (bad) | 
|  | abort (); | 
|  | } | 
|  |  | 
|  | int main() | 
|  | { | 
|  | parallel (1, 2); | 
|  | return 0; | 
|  | } |