Fortran - out of bounds in array constructor with implied do loop
gcc/fortran/ChangeLog: PR fortran/98490 * trans-expr.c (gfc_conv_substring): Do not generate substring bounds check for implied do loop index variable before it actually becomes defined. gcc/testsuite/ChangeLog: PR fortran/98490 * gfortran.dg/bounds_check_23.f90: New test.
This commit is contained in:
parent
de515ce0b2
commit
5fe0865ab7
@ -2630,7 +2630,9 @@ gfc_conv_substring (gfc_se * se, gfc_ref * ref, int kind,
|
||||
if (!CONSTANT_CLASS_P (tmp) && !DECL_P (tmp))
|
||||
end.expr = gfc_evaluate_now (end.expr, &se->pre);
|
||||
|
||||
if (gfc_option.rtcheck & GFC_RTCHECK_BOUNDS)
|
||||
if ((gfc_option.rtcheck & GFC_RTCHECK_BOUNDS)
|
||||
&& (ref->u.ss.start->symtree
|
||||
&& !ref->u.ss.start->symtree->n.sym->attr.implied_index))
|
||||
{
|
||||
tree nonempty = fold_build2_loc (input_location, LE_EXPR,
|
||||
logical_type_node, start.expr,
|
||||
|
18
gcc/testsuite/gfortran.dg/bounds_check_23.f90
Normal file
18
gcc/testsuite/gfortran.dg/bounds_check_23.f90
Normal file
@ -0,0 +1,18 @@
|
||||
! { dg-do run }
|
||||
! { dg-options "-fcheck=bounds -fdump-tree-original" }
|
||||
! PR fortran/98490 - out of bounds in array constructor with implied do loop
|
||||
|
||||
program test
|
||||
implicit none
|
||||
call sub('Lorem ipsum')
|
||||
contains
|
||||
subroutine sub( text )
|
||||
character(len=*), intent(in) :: text
|
||||
character(len=1), allocatable :: c(:)
|
||||
integer :: i
|
||||
c = [ ( text(i:i), i = 1, len(text) ) ]
|
||||
if (c(1) /= 'L') stop 1
|
||||
end subroutine sub
|
||||
end program test
|
||||
|
||||
! { dg-final { scan-tree-dump-times "Substring out of bounds:" 2 "original" } }
|
Loading…
Reference in New Issue
Block a user