* 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
+2008-12-08 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/36802
+ * omp-low.c (use_pointer_for_field): Only call maybe_lookup_decl
+ on parallel and task contexts.
+
2008-12-07 Eric Botcazou <ebotcazou@adacore.com>
* gimple.c (recalculate_side_effects) <tcc_constant>: New case.
omp_context *up;
for (up = shared_ctx->outer; up; up = up->outer)
- if (maybe_lookup_decl (decl, up))
+ if (is_taskreg_ctx (up) && maybe_lookup_decl (decl, up))
break;
- if (up && is_taskreg_ctx (up))
+ if (up)
{
tree c;
+2008-12-08 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/36802
+ * testsuite/libgomp.c/pr36802-1.c: New test.
+ * testsuite/libgomp.c/pr36802-2.c: New test.
+ * testsuite/libgomp.c/pr36802-3.c: New test.
+
2008-12-01 Janis Johnson <janis187@us.ibm.com>
PR libgomp/38270
--- /dev/null
+/* 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;
+}
--- /dev/null
+/* 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;
+}
--- /dev/null
+/* 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;
+}