]> oss.titaniummirror.com Git - msp430-gcc.git/blobdiff - libgomp/testsuite/libgomp.c/pr36802-3.c
Imported gcc-4.4.3
[msp430-gcc.git] / libgomp / testsuite / libgomp.c / pr36802-3.c
diff --git a/libgomp/testsuite/libgomp.c/pr36802-3.c b/libgomp/testsuite/libgomp.c/pr36802-3.c
new file mode 100644 (file)
index 0000000..f11baa0
--- /dev/null
@@ -0,0 +1,46 @@
+/* PR middle-end/36802 */
+
+extern void abort (void);
+
+int q;
+
+int
+foo (int k)
+{
+  int i = 6, n = 0;
+  omp_set_dynamic (0);
+  omp_set_nested (1);
+#pragma omp parallel shared (i) num_threads (3)
+  {
+    int l;
+
+    if (omp_get_num_threads () != 3)
+    #pragma omp atomic
+      n += 1;
+    else
+    #pragma omp for
+      for (l = 0; l < 3; l++)
+       if (!k)
+       #pragma omp parallel shared (i) num_threads (4)
+         {
+           if (omp_get_num_threads () != 4)
+           #pragma omp atomic
+             n += 1;
+           #pragma omp critical
+             i += 1;
+         }
+       else
+       #pragma omp atomic
+         q += i;
+  }
+  if (n == 0 && i != 6 + 3 * 4)
+    abort ();
+  return 0;
+}
+
+int
+main (void)
+{
+  foo (0);
+  return 0;
+}