summaryrefslogtreecommitdiff
path: root/libgomp/testsuite/libgomp.c
diff options
context:
space:
mode:
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2008-12-08 10:36:01 +0000
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2008-12-08 10:36:01 +0000
commit0cb159ec52b4176ce3132ffaba7ff46fcf78ac92 (patch)
treeafeb602ff89a718fac03904e6d621cdacaf590a5 /libgomp/testsuite/libgomp.c
parent1e483c5745ebf4d3bfc7282804880a2e3d5cb8c5 (diff)
downloadgcc-0cb159ec52b4176ce3132ffaba7ff46fcf78ac92.tar.gz
PR middle-end/36802
* omp-low.c (use_pointer_for_field): Only call maybe_lookup_decl on parallel and task contexts. * testsuite/libgomp.c/pr36802-1.c: New test. * testsuite/libgomp.c/pr36802-2.c: New test. * testsuite/libgomp.c/pr36802-3.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@142546 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libgomp/testsuite/libgomp.c')
-rw-r--r--libgomp/testsuite/libgomp.c/pr36802-1.c34
-rw-r--r--libgomp/testsuite/libgomp.c/pr36802-2.c46
-rw-r--r--libgomp/testsuite/libgomp.c/pr36802-3.c46
3 files changed, 126 insertions, 0 deletions
diff --git a/libgomp/testsuite/libgomp.c/pr36802-1.c b/libgomp/testsuite/libgomp.c/pr36802-1.c
new file mode 100644
index 00000000000..4ed5e12769b
--- /dev/null
+++ b/libgomp/testsuite/libgomp.c/pr36802-1.c
@@ -0,0 +1,34 @@
+/* PR middle-end/36802 */
+
+extern void abort (void);
+
+int
+foo (int k)
+{
+ int i = 0;
+#pragma omp parallel
+ #pragma omp single
+ {
+ if (!k)
+ {
+ int j;
+ for (j = 0; j < 10; j++)
+ #pragma omp task
+ if (j == 4)
+ i++;
+ }
+ else
+ i++;
+ }
+ return i;
+}
+
+int
+main (void)
+{
+ if (foo (0) != 1)
+ abort ();
+ if (foo (1) != 1)
+ abort ();
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.c/pr36802-2.c b/libgomp/testsuite/libgomp.c/pr36802-2.c
new file mode 100644
index 00000000000..06e792f0f14
--- /dev/null
+++ b/libgomp/testsuite/libgomp.c/pr36802-2.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 atomic
+ q += i;
+ else
+ #pragma omp parallel shared (i) num_threads (4)
+ {
+ if (omp_get_num_threads () != 4)
+ #pragma omp atomic
+ n += 1;
+ #pragma omp critical
+ i += 1;
+ }
+ }
+ if (n == 0 && i != 6 + 3 * 4)
+ abort ();
+ return 0;
+}
+
+int
+main (void)
+{
+ foo (0);
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.c/pr36802-3.c b/libgomp/testsuite/libgomp.c/pr36802-3.c
new file mode 100644
index 00000000000..f11baa09f57
--- /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;
+}