--- /dev/null
+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;
+}