https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119827
--- Comment #2 from Visagan Ravindran <v2000kiara at gmail dot com> --- (In reply to kargls from comment #1) > Perhaps, a review of the Fortran standard is in order. > > F2023, 9.4.1 > > R910 substring-range is [ scalar-int-expr ] : [ scalar-int-expr ] > > The value of the first scalar-int-expr in substring-range is the starting > point > of the substring and the value of the second one is the ending point of > the > substring. The length of a substring is the number of characters in the > substring and is MAX (l - f + 1, 0), where f and l are the starting and > ending points, respectively. > > Let the characters in the parent string be numbered 1, 2, 3, ..., n, > where n > is the length of the parent string. Then the characters in the substring > are > those from the parent string from the starting point and proceeding in > sequence > up to and including the ending point. If the starting point is greater > than > the ending point, the substring has length zero; otherwise, both the > starting > point and the ending point shall be within the range 1, 2, ..., n. If the > starting point is not specified, the default value is 1. If the ending > point > is not specified, the default value is n. > > ! This does not raise a compilation or runtime error > print *, 'MYSTR3= ', mystr(1:1-1) > > 1 > 0, so you have zero-length substrin > > ! This will not raise an error either... > print *, 'MYSTR4= ', mystr(1:i-1) ! i-1=0 > > 1 > 0, so you have ... > > ! ... nor does this... > i=-1 > print *, 'MYSTR5= ', mystr(1:i) > > 1 > -1, so you have ... Thank you for your reply. A colleague informed me that the NAG compiler picked this up as an error, but I suppose this is entirely in keeping with the standard.