Hello, here is the fix for the regression I have introduced with my assumed rank bounds patch.
Will test and commit as obvious. Mikael 2012-08-02 Mikael Morin <mik...@gcc.gnu.org> PR fortran/54166 * trans-array.c (set_loop_bounds): Access specinfo using spec_dim. 2012-08-02 Mikael Morin <mik...@gcc.gnu.org> PR fortran/54166 * gfortran.dg/array_5.f90: New test.
Index: trans-array.c =================================================================== --- trans-array.c (révision 190099) +++ trans-array.c (copie de travail) @@ -4503,9 +4503,9 @@ set_loop_bounds (gfc_loopinfo *loop) else if (INTEGER_CST_P (info->start[dim]) && !INTEGER_CST_P (specinfo->start[spec_dim]) && integer_onep (info->stride[dim]) - == integer_onep (specinfo->stride[dim]) + == integer_onep (specinfo->stride[spec_dim]) && INTEGER_CST_P (info->stride[dim]) - == INTEGER_CST_P (specinfo->stride[dim])) + == INTEGER_CST_P (specinfo->stride[spec_dim])) loopspec[n] = ss; /* We don't work out the upper bound. else if (INTEGER_CST_P (info->finish[n])
! { dg-do compile } ! ! PR fortran/54166 ! There was an ICE while chosing the bounds to scalarize the FAIL line. ! ! Contributed by Koen Poppe <koen.po...@cs.kuleuven.be> ! module ds_routines contains subroutine dsget(vertic,rstore) real, dimension(:), intent(in out) :: rstore real, dimension(:,:), intent(out) :: vertic integer :: nrvert,point nrvert = 4 point = 26 vertic(1,1:nrvert) = rstore(point+1:point+nrvert) ! FAIL end subroutine dsget end module ds_routines program ds_routines_program use ds_routines print *, "ok" end program ds_routines_program