re PR middle-end/36790 (ICE on valid code: OpenMP task construct with default(shared) clause)

PR middle-end/36790
	* omp-low.c (lower_omp_2): If task_shared_vars, test all DECL_P
	uids in the bitmap, not just VAR_DECL uids.

	* gcc.dg/gomp/pr36790.c: New test.
	* g++.dg/gomp/pr36790.C: New test.

From-SVN: r137695
This commit is contained in:
Jakub Jelinek 2008-07-10 17:22:50 +02:00 committed by Jakub Jelinek
parent 38a28aabc1
commit b826efd986
5 changed files with 60 additions and 4 deletions

View File

@ -1,5 +1,9 @@
2008-07-10 Jakub Jelinek <jakub@redhat.com>
PR middle-end/36790
* omp-low.c (lower_omp_2): If task_shared_vars, test all DECL_P
uids in the bitmap, not just VAR_DECL uids.
PR rtl-optimization/36419
* combine-stack-adj.c (adjust_frame_related_expr): New function.
(combine_stack_adjustments_for_block): Call it if needed. Delete

View File

@ -6246,10 +6246,12 @@ lower_omp_2 (tree *tp, int *walk_subtrees, void *data)
omp_context *ctx = (omp_context *) data;
/* Any variable with DECL_VALUE_EXPR needs to be regimplified. */
if (TREE_CODE (t) == VAR_DECL
&& ((ctx && DECL_HAS_VALUE_EXPR_P (t))
|| (task_shared_vars
&& bitmap_bit_p (task_shared_vars, DECL_UID (t)))))
if (TREE_CODE (t) == VAR_DECL && ctx && DECL_HAS_VALUE_EXPR_P (t))
return t;
if (task_shared_vars
&& DECL_P (t)
&& bitmap_bit_p (task_shared_vars, DECL_UID (t)))
return t;
/* If a global variable has been privatized, TREE_CONSTANT on

View File

@ -1,5 +1,9 @@
2008-07-10 Jakub Jelinek <jakub@redhat.com>
PR middle-end/36790
* gcc.dg/gomp/pr36790.c: New test.
* g++.dg/gomp/pr36790.C: New test.
PR rtl-optimization/36419
* g++.dg/eh/async-unwind1.C: New test.

View File

@ -0,0 +1,23 @@
// PR middle-end/36790
// { dg-do compile }
// { dg-options "-fopenmp -O2" }
void
foo (bool b)
{
}
void
bar (bool b)
{
foo (b);
#pragma omp task default (shared)
b = false;
}
int
main ()
{
bar (false);
return 0;
}

View File

@ -0,0 +1,23 @@
/* PR middle-end/36790 */
/* { dg-do compile } */
/* { dg-options "-fopenmp" } */
void
foo (char b)
{
}
void
bar (char b)
{
foo (b);
#pragma omp task default (shared)
b = 0;
}
int
main ()
{
bar (0);
return 0;
}