re PR middle-end/36802 (pop_gimplify_context ICE using openmp task construct)

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.

From-SVN: r142546
This commit is contained in:
Jakub Jelinek 2008-12-08 11:36:01 +01:00 committed by Jakub Jelinek
parent 4e1e3eda6b
commit d9c194cb9e
6 changed files with 141 additions and 2 deletions

View File

@ -1,3 +1,9 @@
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.

View File

@ -760,10 +760,10 @@ use_pointer_for_field (tree decl, omp_context *shared_ctx)
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;

View File

@ -1,3 +1,10 @@
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

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}