https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119827
Bug ID: 119827 Summary: Out of bounds check fails on substrings for upper bound Product: gcc Version: 14.2.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: fortran Assignee: unassigned at gcc dot gnu.org Reporter: v2000kiara at gmail dot com Target Milestone: --- Hi all, I encountered a possible failure of -fcheck=all to pick up a substring going out of bounds for the upper index at runtime. Consider the following code: program substring_bug implicit none character(len=12) :: mystr integer :: i mystr='Hello World!' i = 0 ! This does raises a runtime error ! print *, 'MYSTR1= ', mystr(i:i+1) ! This raises a compilation error ! print *, 'MYSTR2= ', mystr(13:13) ! This does not raise a compilation or runtime error print *, 'MYSTR3= ', mystr(1:1-1) ! This will not raise an error either... print *, 'MYSTR4= ', mystr(1:i-1) ! i-1=0 ! ... nor does this... i=-1 print *, 'MYSTR5= ', mystr(1:i) end program substring_bug Running: gfortran -O0 -pedantic -Wall -Wconversion -Wcharacter-truncation -Wdo-subscript -Wsurprising -Wunused -Wextra -fno-strict-aliasing -fwrapv -fcheck=all ./a.out gives the following output MYSTR3= MYSTR4= MYSTR5= The first two cases in the program are correctly picked up at compilation time or runtime using -fcheck=all. The final three cases, which are out-of-bounds on the upper index, result in an empty string being returned as seen in the output. I would expect a runtime error to be raised saying something along the lines of "substring out of bounds: upper bound of 'mystr' is larger than <something>"