Fortran: fix wrong array bounds check [PR113471]
gcc/fortran/ChangeLog: PR fortran/113471 * trans-array.cc (array_bound_check_elemental): Array bounds check shall apply here to elemental dimensions of an array section only. gcc/testsuite/ChangeLog: PR fortran/113471 * gfortran.dg/bounds_check_24.f90: New test.
This commit is contained in:
parent
1338ad23ff
commit
94b2e6cb1c
2 changed files with 29 additions and 1 deletions
|
@ -3600,7 +3600,7 @@ array_bound_check_elemental (gfc_se * se, gfc_ss * ss, gfc_expr * expr)
|
|||
continue;
|
||||
}
|
||||
|
||||
if (ref->type == REF_ARRAY && ref->u.ar.dimen > 0)
|
||||
if (ref->type == REF_ARRAY && ref->u.ar.type == AR_SECTION)
|
||||
{
|
||||
ar = &ref->u.ar;
|
||||
for (dim = 0; dim < ar->dimen; dim++)
|
||||
|
|
28
gcc/testsuite/gfortran.dg/bounds_check_24.f90
Normal file
28
gcc/testsuite/gfortran.dg/bounds_check_24.f90
Normal file
|
@ -0,0 +1,28 @@
|
|||
! { dg-do compile }
|
||||
! { dg-additional-options "-fcheck=bounds -fdump-tree-original" }
|
||||
!
|
||||
! PR fortran/113471 - wrong array bounds check
|
||||
|
||||
program pr113471
|
||||
implicit none
|
||||
type t
|
||||
integer, dimension(2) :: c1 = 0
|
||||
end type t
|
||||
type(t) :: cc(7), bb(7)
|
||||
integer :: kk = 1
|
||||
|
||||
! no bounds check (can be determined at compile time):
|
||||
call foo (cc(7)% c1)
|
||||
|
||||
! bounds check involving kk, but no "outside of expected range"
|
||||
call foo (bb(kk)% c1)
|
||||
|
||||
contains
|
||||
subroutine foo (c)
|
||||
integer, intent(in) :: c(:)
|
||||
end
|
||||
end
|
||||
|
||||
! { dg-final { scan-tree-dump-times "below lower bound" 2 "original" } }
|
||||
! { dg-final { scan-tree-dump-times "above upper bound" 2 "original" } }
|
||||
! { dg-final { scan-tree-dump-not "outside of expected range" "original" } }
|
Loading…
Add table
Reference in a new issue