diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c index 54e1107c71193e12421d0a6731aa8164ef807a73..8f93b43bafbeac3618b2e2d7eceecfd90d82e027 100644 --- a/gcc/fortran/trans-array.c +++ b/gcc/fortran/trans-array.c @@ -10800,7 +10800,8 @@ gfc_walk_array_ref (gfc_ss * ss, gfc_expr * expr, gfc_ref * ref) if (ref->type == REF_SUBSTRING) { ss = gfc_get_scalar_ss (ss, ref->u.ss.start); - ss = gfc_get_scalar_ss (ss, ref->u.ss.end); + if (ref->u.ss.end) + ss = gfc_get_scalar_ss (ss, ref->u.ss.end); } /* We're only interested in array sections from now on. */ diff --git a/gcc/testsuite/gfortran.dg/pr53298.f90 b/gcc/testsuite/gfortran.dg/pr53298.f90 new file mode 100644 index 0000000000000000000000000000000000000000..998f88df926bd0f0727140174f841aae15c2961e --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr53298.f90 @@ -0,0 +1,14 @@ +! { dg-do run } + +program test + character(len=5) :: str(3) + str = ["abcde", "12345", "ABCDE" ] + call f(str(:)) +contains + subroutine f(x) + character(len=*) :: x(:) + write(*,*) x(:)(1:) + end subroutine f +end program test + +! { dg-output "abcde12345ABCDE" }