summaryrefslogtreecommitdiff
path: root/libgomp/testsuite/libgomp.c/pr36802-3.c
diff options
context:
space:
mode:
Diffstat (limited to 'libgomp/testsuite/libgomp.c/pr36802-3.c')
-rw-r--r--libgomp/testsuite/libgomp.c/pr36802-3.c46
1 files changed, 46 insertions, 0 deletions
diff --git a/libgomp/testsuite/libgomp.c/pr36802-3.c b/libgomp/testsuite/libgomp.c/pr36802-3.c
new file mode 100644
index 000000000..f11baa09f
--- /dev/null
+++ b/libgomp/testsuite/libgomp.c/pr36802-3.c
@@ -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;
+}