re PR tree-optimization/42781 (ICE in pt_solutions_same_restrict_base, at tree-ssa-structalias.c:5072)

2010-01-18  Richard Guenther  <rguenther@suse.de>

	PR tree-optimization/42781
	* tree-ssa-structalias.c (find_what_var_points_to): Skip
	restrict processing only if the original variable was
	artificial.

	* gfortran.fortran-torture/compile/pr42781.f90: New testcase.

From-SVN: r156006
This commit is contained in:
Richard Guenther 2010-01-18 09:57:11 +00:00 committed by Richard Biener
parent f7746c5941
commit 1cfd38bea3
4 changed files with 75 additions and 3 deletions

View file

@ -1,3 +1,10 @@
2010-01-18 Richard Guenther <rguenther@suse.de>
PR tree-optimization/42781
* tree-ssa-structalias.c (find_what_var_points_to): Skip
restrict processing only if the original variable was
artificial.
2010-01-18 Joern Rennecke <amylaar@spamcop.net>
* doc/tm.texi (TARGET_ASM_FUNCTION_EPILOGUE): Update text on where to

View file

@ -1,3 +1,8 @@
2010-01-18 Richard Guenther <rguenther@suse.de>
PR tree-optimization/42781
* gfortran.fortran-torture/compile/pr42781.f90: New testcase.
2010-01-17 Richard Guenther <rguenther@suse.de>
PR middle-end/42248

View file

@ -0,0 +1,59 @@
! ICE with gfortran 4.5 at -O1:
!gfcbug98.f90: In function convert_cof:
!gfcbug98.f90:36:0: internal compiler error: in pt_solutions_same_restrict_base,
!at tree-ssa-structalias.c:5072
module foo
implicit none
type t_time
integer :: secs = 0
end type t_time
contains
elemental function time_cyyyymmddhh (cyyyymmddhh) result (time)
type (t_time) :: time
character(len=10),intent(in) :: cyyyymmddhh
end function time_cyyyymmddhh
function nf90_open(path, mode, ncid)
character(len = *), intent(in) :: path
integer, intent(in) :: mode
integer, intent(out) :: ncid
integer :: nf90_open
end function nf90_open
end module foo
!==============================================================================
module gfcbug98
use foo
implicit none
type t_fileinfo
character(len=10) :: atime = ' '
end type t_fileinfo
type t_body
real :: bg(10)
end type t_body
contains
subroutine convert_cof (ifile)
character(len=*) ,intent(in) :: ifile
character(len=5) :: version
type(t_fileinfo) :: gattr
type(t_time) :: atime
type(t_body),allocatable :: tmp_dat(:)
real ,allocatable :: BDA(:, :, :)
call open_input
call convert_data
contains
subroutine open_input
integer :: i,j
version = ''
j = nf90_open(ifile, 1, i)
end subroutine open_input
!--------------------------------------------------------------------------
subroutine convert_data
BDA(1,:,1) = tmp_dat(1)% bg(:)
atime = time_cyyyymmddhh (gattr% atime)
end subroutine convert_data
end subroutine convert_cof
end module gfcbug98

View file

@ -4776,18 +4776,19 @@ set_uids_in_ptset (bitmap into, bitmap from, struct pt_solution *pt)
/* Compute the points-to solution *PT for the variable VI. */
static void
find_what_var_points_to (varinfo_t vi, struct pt_solution *pt)
find_what_var_points_to (varinfo_t orig_vi, struct pt_solution *pt)
{
unsigned int i;
bitmap_iterator bi;
bitmap finished_solution;
bitmap result;
varinfo_t vi;
memset (pt, 0, sizeof (struct pt_solution));
/* This variable may have been collapsed, let's get the real
variable. */
vi = get_varinfo (find (vi->id));
vi = get_varinfo (find (orig_vi->id));
/* Translate artificial variables into SSA_NAME_PTR_INFO
attributes. */
@ -4822,7 +4823,7 @@ find_what_var_points_to (varinfo_t vi, struct pt_solution *pt)
/* Instead of doing extra work, simply do not create
elaborate points-to information for pt_anything pointers. */
if (pt->anything
&& (vi->is_artificial_var
&& (orig_vi->is_artificial_var
|| !pt->vars_contains_restrict))
return;