mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-22 18:31:48 +08:00
re PR middle-end/27573 (ICE with -fopenmp -fprofile-generate)
PR middle-end/27573 * omp-low.c (expand_omp_parallel): Don't assert .OMP_DATA_I = &.OMP_DATA_O is the first statement in the block, instead search for it. * gcc.dg/gomp/pr27573.c: New test. * gfortran.dg/gomp/pr27573.f90: New test. From-SVN: r113823
This commit is contained in:
parent
4156f84bfb
commit
b570947c8a
@ -1,5 +1,10 @@
|
||||
2006-05-16 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR middle-end/27573
|
||||
* omp-low.c (expand_omp_parallel): Don't assert
|
||||
.OMP_DATA_I = &.OMP_DATA_O is the first statement in the block,
|
||||
instead search for it.
|
||||
|
||||
PR c/27499
|
||||
* gimplify.c (gimplify_omp_for): Remove assertion that iteration var
|
||||
is signed.
|
||||
|
@ -2456,7 +2456,8 @@ expand_omp_parallel (struct omp_region *region)
|
||||
else
|
||||
{
|
||||
/* If the parallel region needs data sent from the parent
|
||||
function, then the very first statement of the parallel body
|
||||
function, then the very first statement (except possible
|
||||
tree profile counter updates) of the parallel body
|
||||
is a copy assignment .OMP_DATA_I = &.OMP_DATA_O. Since
|
||||
&.OMP_DATA_O is passed as an argument to the child function,
|
||||
we need to replace it with the argument as seen by the child
|
||||
@ -2470,21 +2471,26 @@ expand_omp_parallel (struct omp_region *region)
|
||||
if (OMP_PARALLEL_DATA_ARG (entry_stmt))
|
||||
{
|
||||
basic_block entry_succ_bb = single_succ (entry_bb);
|
||||
block_stmt_iterator si = bsi_start (entry_succ_bb);
|
||||
tree stmt;
|
||||
block_stmt_iterator si;
|
||||
|
||||
gcc_assert (!bsi_end_p (si));
|
||||
for (si = bsi_start (entry_succ_bb); ; bsi_next (&si))
|
||||
{
|
||||
tree stmt;
|
||||
|
||||
stmt = bsi_stmt (si);
|
||||
gcc_assert (TREE_CODE (stmt) == MODIFY_EXPR
|
||||
&& TREE_CODE (TREE_OPERAND (stmt, 1)) == ADDR_EXPR
|
||||
&& TREE_OPERAND (TREE_OPERAND (stmt, 1), 0)
|
||||
== OMP_PARALLEL_DATA_ARG (entry_stmt));
|
||||
|
||||
if (TREE_OPERAND (stmt, 0) == DECL_ARGUMENTS (child_fn))
|
||||
bsi_remove (&si, true);
|
||||
else
|
||||
TREE_OPERAND (stmt, 1) = DECL_ARGUMENTS (child_fn);
|
||||
gcc_assert (!bsi_end_p (si));
|
||||
stmt = bsi_stmt (si);
|
||||
if (TREE_CODE (stmt) == MODIFY_EXPR
|
||||
&& TREE_CODE (TREE_OPERAND (stmt, 1)) == ADDR_EXPR
|
||||
&& TREE_OPERAND (TREE_OPERAND (stmt, 1), 0)
|
||||
== OMP_PARALLEL_DATA_ARG (entry_stmt))
|
||||
{
|
||||
if (TREE_OPERAND (stmt, 0) == DECL_ARGUMENTS (child_fn))
|
||||
bsi_remove (&si, true);
|
||||
else
|
||||
TREE_OPERAND (stmt, 1) = DECL_ARGUMENTS (child_fn);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Declare local variables needed in CHILD_CFUN. */
|
||||
|
@ -1,5 +1,9 @@
|
||||
2006-05-16 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR middle-end/27573
|
||||
* gcc.dg/gomp/pr27573.c: New test.
|
||||
* gfortran.dg/gomp/pr27573.f90: New test.
|
||||
|
||||
PR c/27499
|
||||
* gcc.dg/gomp/pr27499.c: New test.
|
||||
* g++.dg/gomp/pr27499.C: New test.
|
||||
|
20
gcc/testsuite/gcc.dg/gomp/pr27573.c
Normal file
20
gcc/testsuite/gcc.dg/gomp/pr27573.c
Normal file
@ -0,0 +1,20 @@
|
||||
/* PR middle-end/27573 */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fopenmp -fprofile-generate" } */
|
||||
|
||||
extern int puts (const char *);
|
||||
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
int i, j = 8;
|
||||
#pragma omp parallel
|
||||
{
|
||||
puts ("foo");
|
||||
for (i = 1; i < j - 1; i++)
|
||||
;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* { dg-final { cleanup-coverage-files } } */
|
15
gcc/testsuite/gfortran.dg/gomp/pr27573.f90
Normal file
15
gcc/testsuite/gfortran.dg/gomp/pr27573.f90
Normal file
@ -0,0 +1,15 @@
|
||||
! PR middle-end/27573
|
||||
! { dg-do compile }
|
||||
! { dg-options "-O2 -fopenmp -fprofile-generate" }
|
||||
|
||||
program pr27573
|
||||
integer i,j
|
||||
j = 8
|
||||
!$omp parallel
|
||||
print *, "foo"
|
||||
do i = 1, j - 1
|
||||
end do
|
||||
!$omp end parallel
|
||||
end
|
||||
|
||||
! { dg-final { cleanup-coverage-files } }
|
Loading…
x
Reference in New Issue
Block a user