00001 extern void abort (void); 00002 00003 int 00004 f1 (void) 00005 { 00006 int a = 6, e = 0; 00007 int nested (int x) 00008 { 00009 return x + a; 00010 } 00011 #pragma omp task 00012 { 00013 int n = nested (5); 00014 if (n != 11) 00015 #pragma omp atomic 00016 e += 1; 00017 } 00018 #pragma omp taskwait 00019 return e; 00020 } 00021 00022 int 00023 f2 (void) 00024 { 00025 int a = 6, e = 0; 00026 int nested (int x) 00027 { 00028 return x + a; 00029 } 00030 a = nested (4); 00031 #pragma omp task 00032 { 00033 if (a != 10) 00034 #pragma omp atomic 00035 e += 1; 00036 } 00037 #pragma omp taskwait 00038 return e; 00039 } 00040 00041 int 00042 main (void) 00043 { 00044 int e = 0; 00045 #pragma omp parallel num_threads(4) reduction(+:e) 00046 { 00047 e += f1 (); 00048 e += f2 (); 00049 } 00050 if (e) 00051 abort (); 00052 return 0; 00053 }