summaryrefslogtreecommitdiff
path: root/libgomp/testsuite/libgomp.c/pr35130.c
diff options
context:
space:
mode:
Diffstat (limited to 'libgomp/testsuite/libgomp.c/pr35130.c')
-rw-r--r--libgomp/testsuite/libgomp.c/pr35130.c131
1 files changed, 131 insertions, 0 deletions
diff --git a/libgomp/testsuite/libgomp.c/pr35130.c b/libgomp/testsuite/libgomp.c/pr35130.c
new file mode 100644
index 000000000..12962d807
--- /dev/null
+++ b/libgomp/testsuite/libgomp.c/pr35130.c
@@ -0,0 +1,131 @@
+/* PR middle-end/35130 */
+
+extern void abort (void);
+
+void
+f1 (void)
+{
+ int a[4], k;
+ void nested (int x)
+ {
+ a[x] = 42;
+ }
+
+ for (k = 0; k < 4; k++)
+ a[k] = 0;
+#pragma omp parallel for
+ for (k = 0; k < 4; k++)
+ nested (k);
+
+ if (a[0] != 42 || a[1] != 42 || a[2] != 42 || a[3] != 42)
+ abort ();
+}
+
+void
+f2 (void)
+{
+ int a[4], k;
+ void nested (void)
+ {
+ int l;
+ void nested2 (int x)
+ {
+ a[x] = 42;
+ }
+#pragma omp parallel for
+ for (l = 0; l < 4; l++)
+ nested2 (l);
+ }
+
+ for (k = 0; k < 4; k++)
+ a[k] = 0;
+
+ nested ();
+
+ if (a[0] != 42 || a[1] != 42 || a[2] != 42 || a[3] != 42)
+ abort ();
+}
+
+void
+f3 (void)
+{
+ int a[4], b[4], c[4], k;
+ void nested (int x)
+ {
+ a[x] = b[x] = c[x] = 42;
+ }
+
+ for (k = 0; k < 4; k++)
+ a[k] = b[k] = c[k] = 0;
+ nested (0);
+
+#pragma omp parallel
+ {
+ #pragma omp single
+ {
+ a[1] = 43;
+ b[1] = 43;
+ }
+ #pragma omp parallel
+ {
+ #pragma omp single
+ {
+ b[2] = 44;
+ c[2] = 44;
+ }
+ }
+ }
+
+ if (a[0] != 42 || a[1] != 43 || a[2] != 0 || a[3] != 0)
+ abort ();
+ if (b[0] != 42 || b[1] != 43 || b[2] != 44 || b[3] != 0)
+ abort ();
+ if (c[0] != 42 || c[1] != 0 || c[2] != 44 || c[3] != 0)
+ abort ();
+}
+
+void
+f4 (void)
+{
+ int a[4], b[4], c[4], k;
+ void nested ()
+ {
+ #pragma omp parallel
+ {
+ #pragma omp single
+ {
+ a[1] = 43;
+ b[1] = 43;
+ }
+ #pragma omp parallel
+ {
+ #pragma omp single
+ {
+ b[2] = 44;
+ c[2] = 44;
+ }
+ }
+ }
+ }
+
+ for (k = 0; k < 4; k++)
+ a[k] = b[k] = c[k] = k == 0 ? 42 : 0;
+ nested ();
+
+ if (a[0] != 42 || a[1] != 43 || a[2] != 0 || a[3] != 0)
+ abort ();
+ if (b[0] != 42 || b[1] != 43 || b[2] != 44 || b[3] != 0)
+ abort ();
+ if (c[0] != 42 || c[1] != 0 || c[2] != 44 || c[3] != 0)
+ abort ();
+}
+
+int
+main (void)
+{
+ f1 ();
+ f2 ();
+ f3 ();
+ f4 ();
+ return 0;
+}