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 }