2
0
mirror of git://gcc.gnu.org/git/gcc.git synced 2025-03-21 23:51:18 +08:00

re PR tree-optimization/48611 (ICE: SIGSEGV in remap_eh_region_nr (tree-inline.c:1194) with -Os -fopenmp -fexceptions -fno-tree-ccp -fno-tree-copy-prop on basic code)

PR tree-optimization/48611
	PR tree-optimization/48794
	* tree-eh.c (remove_unreachable_handlers): Don't remove regions
	referenced from RESX or EH_DISPATCH arguments.

	* gfortran.dg/gomp/pr48611.f90: New test.
	* gfortran.dg/gomp/pr48794.f90: New test.

From-SVN: r173607
This commit is contained in:
Jakub Jelinek 2011-05-10 08:08:18 +02:00 committed by Jakub Jelinek
parent e7f7802150
commit 6ae70ea2e6
5 changed files with 47 additions and 0 deletions

@ -1,5 +1,10 @@
2011-05-10 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/48611
PR tree-optimization/48794
* tree-eh.c (remove_unreachable_handlers): Don't remove regions
referenced from RESX or EH_DISPATCH arguments.
PR debug/48928
* dfp.c (decimal_to_decnumber): Handle conversion from
dconst{1,2,m1,half}.

@ -1,5 +1,10 @@
2011-05-10 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/48611
PR tree-optimization/48794
* gfortran.dg/gomp/pr48611.f90: New test.
* gfortran.dg/gomp/pr48794.f90: New test.
PR debug/48928
* gcc.dg/dfp/pr48928.c: New test.

@ -0,0 +1,12 @@
! PR tree-optimization/48611
! { dg-do compile }
! { dg-options "-Os -fopenmp -fexceptions -fno-tree-ccp -fno-tree-copy-prop" }
integer, allocatable :: a(:)
logical :: l
!$omp parallel private (a) reduction (.or.:l)
do i = 1, 7
a(:) = i
end do
!$omp end parallel
end

@ -0,0 +1,12 @@
! PR tree-optimization/48794
! { dg-do compile }
! { dg-options "-Os -fopenmp -fexceptions -fno-tree-ccp -fno-tree-copy-prop" }
integer, allocatable :: a(:)
logical :: l
if (allocated (a)) call abort
!$omp parallel private (a) reduction (.or.:l)
do i = 1, 7
end do
!$omp end parallel
end

@ -3316,6 +3316,19 @@ remove_unreachable_handlers (void)
SET_BIT (r_reachable, region->index);
SET_BIT (lp_reachable, lp_nr);
}
/* Avoid removing regions referenced from RESX/EH_DISPATCH. */
switch (gimple_code (stmt))
{
case GIMPLE_RESX:
SET_BIT (r_reachable, gimple_resx_region (stmt));
break;
case GIMPLE_EH_DISPATCH:
SET_BIT (r_reachable, gimple_eh_dispatch_region (stmt));
break;
default:
break;
}
}
}