V Donaldson d8364e3ea4 [flang] Allow tabs as white space in formats
The fortran standard views blanks in IO formats as white space in
non-string contexts.  Other compilers extend this to also view horizontal
tabs as white space.  Some compilers additionally add other white space
characters to this group.

Add recognition of horizontal and vertical tabs to runtime format
validation code to match what the runtime code currently does.
2022-02-16 17:49:52 -08:00

313 lines
8.3 KiB
Fortran

! RUN: %python %S/test_errors.py %s %flang_fc1
write(*,*)
write(*,'()')
write(*,'(A)')
write(*,'(2X:2X)')
write(*,'(2X/2X)')
write(*,'(3/2X)')
write(*,'(3PF5.2)')
write(*,'(+3PF5.2)')
write(*,'(-3PF5.2)')
write(*,'(000p,10p,0p)')
write(*,'(3P7D5.2)')
write(*,'(3P,7F5.2)')
write(*,'(2X,(i3))')
write(*,'(5X,*(2X,I2))')
write(*,'(5X,*(2X,DT))')
write(*,'(*(DT))')
write(*,'(*(DT"value"))')
write(*,'(*(DT(+1,0,-1)))')
write(*,'(*(DT"value"(+1,000,-1)))')
write(*,'(*(DT(0)))')
write(*,'(S,(RZ),2E10.3)')
write(*,'(7I2)')
write(*,'(07I02)')
write(*,'(07I02.01)')
write(*,'(07I02.02)')
write(*,'(I0)')
write(*,'(G4.2)')
write(*,'(G0.8)')
write(*,'(T3)')
write(*,'("abc")')
write(*,'("""abc""")')
write(*,'("a""""bc", 2x)')
write(*,'(3Habc)')
write(*,'(3Habc, 2X, 3X)')
write(*,'(987654321098765432X)')
write(*,'($)')
write(*,'(\)')
write(*,'(RZ,RU,RP,RN,RD,RC,SS,SP,S,3G15.3e2)')
write(*, '(' // achar( 9) // ')') ! horizontal tab
write(*, '(' // achar(11) // ')') ! vertical tab
write(*, '(' // achar(32) // ')') ! space
! C1302 warnings; no errors
write(*,'(3P7I2)')
write(*,'(5X i3)')
write(*,'(XEN)')
!ERROR: Empty format expression
write(*,"")
!ERROR: Empty format expression
write(*,"" // '' // "")
!ERROR: Format expression must have an initial '('
write(*,'I3')
!ERROR: Unexpected '+' in format expression
write(*,'(+7I2)')
!ERROR: Unexpected '-' in format expression
write(*,'(-7I2)')
!ERROR: 'P' edit descriptor must have a scale factor
write(*,'(P7F5.2)')
!ERROR: 'P' edit descriptor must have a scale factor
write(*,'(P7F' // '5.2)')
!ERROR: Unexpected integer constant
write(*,'(X,3,3L4)')
!ERROR: Unexpected ',' before ')' in format expression
write(*,'(X,i3,)')
!ERROR: Unexpected ',' in format expression
write(*,'(X,i3,,)')
!ERROR: Unexpected ',' in format expression
!ERROR: Unexpected ',' before ')' in format expression
write(*,'(X,i3,,,)')
!ERROR: Unexpected ',' before ')' in format expression
write(*,'(X,(i3,))')
!ERROR: Unexpected '*' in format expression
write(*,'(*)')
!ERROR: Expected integer constant in 'DT' edit descriptor v-list
write(*,'(*(DT(+1,0,=1)))')
!ERROR: Expected integer constant in 'DT' edit descriptor v-list
write(*,'(DT(1,0,+))')
!ERROR: Expected integer constant in 'DT' edit descriptor v-list
write(*,'(DT(1,0,*))')
!ERROR: Expected ',' or ')' in 'DT' edit descriptor v-list
write(*,'(DT(1,0,2*))')
!ERROR: Expected ',' or ')' in 'DT' edit descriptor v-list
write(*,'(DT(1,0,2*,+,?))')
!ERROR: Expected integer constant in 'DT' edit descriptor v-list
!ERROR: Unterminated format expression
write(*,'(DT(1,0,*)')
!ERROR: Expected ',' or ')' in 'DT' edit descriptor v-list
!ERROR: Unterminated format expression
write(*,'(DT(1,0,2*,+,?)')
!ERROR: Unexpected '?' in format expression
!ERROR: Unexpected ',' in format expression
write(*,'(?,*(DT(+1,,1)))')
!ERROR: Repeat specifier before unlimited format item list
!ERROR: Unlimited format item list must contain a data edit descriptor
write(*,'(5X,3*(2(X)))')
!ERROR: Nested unlimited format item list
write(*,'(D12.2,(*(F10.2)))')
!ERROR: Unlimited format item list must contain a data edit descriptor
write(*,'(5X,*(2(X)))')
!ERROR: Character in format after unlimited format item list
write(*,'(*(Z5),*(2F20.3))')
!ERROR: Character in format after unlimited format item list
write(*,'(*(B5),*(2(I5)))')
!ERROR: Character in format after unlimited format item list
write(*,'(*(I5), D12.7)')
!ERROR: 'I' edit descriptor 'm' value is greater than 'w' value
write(*,'(07I02.0 3)')
!ERROR: 'Z' edit descriptor 'm' value is greater than 'w' value
write(*,'(07Z02.4)')
!ERROR: 'I' edit descriptor repeat specifier must be positive
write(*,'(0I2)')
!ERROR: List repeat specifier must be positive
write(*,'(0(I2))')
!ERROR: List repeat specifier must be positive
write(*,'(000(I2))')
!ERROR: List repeat specifier must be positive
!ERROR: 'I' edit descriptor repeat specifier must be positive
write(*,'(0(0I2))')
!ERROR: Kind parameter '_' character in format expression
write(*,'(5_4X)')
!ERROR: Unexpected '+' in format expression
write(*,'(I+3)')
!ERROR: Unexpected '-' in format expression
write(*,'(I-3)')
!ERROR: Unexpected '-' in format expression
write(*,'(I-3, X)')
!ERROR: 'X' edit descriptor must have a positive position value
write(*,'(0X)')
!ERROR: Unexpected 'Y' in format expression
write(*,'(XY)')
!ERROR: Unexpected 'Y' in format expression
write(*,'(XYM)')
!ERROR: Unexpected 'M' in format expression
write(*,'(MXY)')
!ERROR: Unexpected 'R' in format expression
!ERROR: Unexpected 'R' in format expression
write(*,"(RR, RV)")
!ERROR: Unexpected '-' in format expression
!ERROR: Unexpected 'Y' in format expression
write(*,'(I-3, XY)')
!ERROR: 'A' edit descriptor 'w' value must be positive
write(*,'(A0)')
!ERROR: 'L' edit descriptor 'w' value must be positive
write(*,'(L0)')
!ERROR: Expected 'G' edit descriptor '.d' value
write(*,'(G4)')
!ERROR: A 'G0' edit descriptor must not have an 'e' value
write(*,'(G0.8e)')
!ERROR: A 'G0' edit descriptor must not have an 'e' value
write(*,'(G0.8e2)')
!ERROR: Kind parameter '_' character in format expression
write(*,'(I5_4)')
!ERROR: Kind parameter '_' character in format expression
write(*,'(5_4P)')
!ERROR: 'T' edit descriptor must have a positive position value
write(*,'(T0)')
!ERROR: 'T' edit descriptor must have a positive position value
!ERROR: Unterminated format expression
write(*,'(T0')
!ERROR: 'TL' edit descriptor must have a positive position value
!ERROR: 'T' edit descriptor must have a positive position value
!ERROR: Expected 'EN' edit descriptor 'd' value after '.'
write(*,'(TL0,T0,EN12.)')
!ERROR: Expected 'EX' edit descriptor 'e' value after 'E'
write(*,'(EX12.3e2, EX12.3e)')
!ERROR: 'TL' edit descriptor must have a positive position value
!ERROR: 'T' edit descriptor must have a positive position value
!ERROR: Unterminated format expression
write(*,'(TL00,T000')
!ERROR: Unterminated format expression
write(*,'(')
!ERROR: Unterminated format expression
write(*,'(-')
!ERROR: Unterminated format expression
write(*,'(I3+')
!ERROR: Unterminated format expression
write(*,'(I3,-')
!ERROR: Unexpected integer constant
write(*,'(3)')
!ERROR: Unexpected ',' before ')' in format expression
write(*,'(3,)')
!ERROR: Unexpected ',' in format expression
write(*,'(,3)')
!ERROR: Unexpected ',' before ')' in format expression
write(*,'(,)')
!ERROR: Unterminated format expression
write(*,'(X')
!ERROR: Unterminated format expression
write(*,'(XX') ! C1302 warning is not an error
!ERROR: Unexpected '@' in format expression
!ERROR: Unexpected '#' in format expression
!ERROR: Unexpected '&' in format expression
write(*,'(@@, # ,&&& &&, ignore error 4)')
!ERROR: Repeat specifier before 'TR' edit descriptor
write(*,'(3TR0)')
!ERROR: 'TR' edit descriptor must have a positive position value
write(*,'(TR0)')
!ERROR: Kind parameter '_' character in format expression
write(*,'(3_4X)')
!ERROR: Kind parameter '_' character in format expression
write(*,'(1_"abc")')
!ERROR: Unterminated string
!ERROR: Unterminated format expression
write(*,'("abc)')
!ERROR: Unexpected '_' in format expression
write(*,'("abc"_1)')
!ERROR: Unexpected '@' in format expression
write(*,'(3Habc, 3@, X)')
!ERROR: Unterminated format expression
write(*,'(4Habc)')
!ERROR: Unterminated 'H' edit descriptor
!ERROR: Unterminated format expression
write(*,'(5Habc)')
!ERROR: Unterminated 'H' edit descriptor
!ERROR: Unterminated format expression
write(*,'(50Habc)')
!ERROR: Integer overflow in format expression
write(*,'(9876543210987654321X)')
!ERROR: Integer overflow in format expression
write(*,'(98765432109876543210X)')
!ERROR: Integer overflow in format expression
write(*,'(I98765432109876543210)')
!ERROR: Integer overflow in format expression
write(*,'(45I20.98765432109876543210, 45I20)')
!ERROR: Integer overflow in format expression
write(*,'(45' // ' I20.9876543' // '2109876543210, 45I20)')
!ERROR: Repeat specifier before '$' edit descriptor
write(*,'(7$)')
end