mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-19 00:01:21 +08:00
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:
parent
4e1e3eda6b
commit
d9c194cb9e
@ -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.
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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
|
||||
|
34
libgomp/testsuite/libgomp.c/pr36802-1.c
Normal file
34
libgomp/testsuite/libgomp.c/pr36802-1.c
Normal 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;
|
||||
}
|
46
libgomp/testsuite/libgomp.c/pr36802-2.c
Normal file
46
libgomp/testsuite/libgomp.c/pr36802-2.c
Normal 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;
|
||||
}
|
46
libgomp/testsuite/libgomp.c/pr36802-3.c
Normal file
46
libgomp/testsuite/libgomp.c/pr36802-3.c
Normal 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;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user