xref: /llvm-project/flang/test/Semantics/io03.f90 (revision 300370c27b31ced572b957b6efdbb2bcee277392)
1! RUN: %python %S/test_errors.py %s %flang_fc1
2  character(kind=1,len=50) internal_file
3  character(kind=2,len=50) internal_file2
4  character(kind=4,len=50) internal_file4
5  character(kind=1,len=50) internal_fileA(20)
6  character(kind=1,len=111) msg
7  character(20) advance
8  character(20) :: cvar;
9  character, parameter :: const_internal_file = "(I6)"
10  character, parameter :: const_cvar*(*) = "Ceci n'est pas une pipe."
11  integer*1 stat1
12  integer*2 stat2, id2
13  integer*8 stat8
14  integer :: iunit = 10
15  integer, parameter :: junit = 11, const_size = 13, const_int = 15
16  integer :: vv(10) = 7
17
18  namelist /mmm/ mm1, mm2
19  namelist /nnn/ nn1, nn2
20
21  advance='no'
22
23  open(10)
24
25  read*
26  print*, 'Ok'
27  read(*)
28  read*, jj
29  read(*, *) jj
30  read(unit=*, *) jj
31  read(*, fmt=*) jj
32  read(*, '(I4)') jj
33  read(*, fmt='(I4)') jj
34  read(fmt='(I4)', unit=*) jj
35  read(iunit, *) jj
36  read(junit, *) jj
37  read(10, *) jj, cvar, cvar(7:17)
38  read(internal_file, *) jj
39  read(internal_fileA(3), *) jj
40  read(internal_fileA(4:9), *) jj
41  read(10, nnn)
42  read(internal_file, nnn)
43  read(internal_file, nml=nnn)
44  read(const_internal_file, *)
45  read(fmt=*, unit=internal_file)
46  read(nml=nnn, unit=internal_file)
47  read(iunit, nnn)
48  read(10, nml=nnn)
49  read(10, asynchronous='no') jj
50  read(10, asynchronous='yes') jj
51  read(10, eor=9, advance='no', fmt='(I4)') jj
52  read(10, eor=9, advance='no', fmt='(I4)') jj
53  read(10, asynchronous='yes', id=id) jj
54  read(10, '(I4)', advance='no', asynchronous='yes', blank='null', &
55      decimal='comma', end=9, eor=9, err=9, id=id, iomsg=msg, iostat=stat2, &
56      pad='no', round='processor_defined', size=kk) jj
57
58  read(internal_file2, *) jj
59  read(internal_file4, *) jj
60
61  !This is a valid statement but it's not what it looks like; "(internal-file)"
62  !must be parsed as a format expression, not as an internal unit.
63  read(internal_file) jj
64
65  !ERROR: If UNIT=internal-file appears, FMT or NML must also appear
66  read(internal_file, iostat=stat1) jj
67
68  !ERROR: Internal file must not have a vector subscript
69  read(internal_fileA(vv), *) jj
70
71  !ERROR: Input variable 'const_int' is not definable
72  !BECAUSE: '15_4' is not a variable or pointer
73  read(11, *) const_int
74
75  !ERROR: SIZE variable 'const_size' is not definable
76  !BECAUSE: '13_4' is not a variable or pointer
77  read(11, pos=ipos, size=const_size, end=9)
78
79  !ERROR: Input variable 'const_cvar' is not definable
80  !BECAUSE: '"Ceci n'est pas une pipe."' is not a variable or pointer
81  read(11, *) const_cvar
82
83  !ERROR: Input variable 'const_cvar(3:13)' is not definable
84  !BECAUSE: '"ci n'est pa"' is not a variable or pointer
85  read(11, *) const_cvar(3:13)
86
87  !ERROR: Duplicate IOSTAT specifier
88  read(11, pos=ipos, iostat=stat1, iostat=stat2)
89
90  !ERROR: Duplicate END specifier
91  read(11, end=9, pos=ipos, end=9)
92
93  !ERROR: Duplicate NML specifier
94  read(10, nml=mmm, nml=nnn)
95
96  !ERROR: READ statement must have a UNIT specifier
97  read(err=9, iostat=stat8) jj
98
99  !ERROR: READ statement must not have a DELIM specifier
100  !ERROR: READ statement must not have a SIGN specifier
101  read(10, delim='quote', sign='plus') jj
102
103  !ERROR: If NML appears, REC must not appear
104  read(10, nnn, rec=nn)
105
106  !ERROR: If NML appears, FMT must not appear
107  !ERROR: If NML appears, a data list must not appear
108  read(10, fmt=*, nml=nnn) jj
109
110  !ERROR: If UNIT=* appears, REC must not appear
111  read(*, rec=13)
112
113  !ERROR: If UNIT=* appears, POS must not appear
114  read(*, pos=13)
115
116  !ERROR: If UNIT=internal-file appears, FMT or NML must also appear
117  !ERROR: If UNIT=internal-file appears, REC must not appear
118  read(internal_file, rec=13)
119
120  !ERROR: If UNIT=internal-file appears, POS must not appear
121  read(internal_file, *, pos=13)
122
123  !ERROR: If REC appears, END must not appear
124  read(10, fmt='(I4)', end=9, rec=13) jj
125
126  !ERROR: If REC appears, FMT=* must not appear
127  read(10, *, rec=13) jj
128
129  !ERROR: If ADVANCE appears, UNIT=internal-file must not appear
130  read(internal_file, '(I4)', eor=9, advance='no') jj
131
132  !ERROR: If ADVANCE appears, an explicit format must also appear
133  !ERROR: If EOR appears, ADVANCE with value 'NO' must also appear
134  read(10, eor=9, advance='yes')
135
136  !ERROR: If EOR appears, ADVANCE with value 'NO' must also appear
137  read(10, eor=9)
138
139  !ERROR: Invalid ASYNCHRONOUS value 'nay'
140  read(10, asynchronous='nay') ! prog req
141
142  !ERROR: If ASYNCHRONOUS='YES' appears, UNIT=number must also appear
143  read(*, asynchronous='yes')
144
145  !ERROR: If ASYNCHRONOUS='YES' appears, UNIT=number must also appear
146  read(internal_file, *, asynchronous='y'//'es')
147
148  !ERROR: If ID appears, ASYNCHRONOUS='YES' must also appear
149  read(10, id=id)
150
151  !ERROR: If ID appears, ASYNCHRONOUS='YES' must also appear
152  read(10, asynchronous='n'//'o', id=id)
153
154  !ERROR: If POS appears, REC must not appear
155  read(10, pos=13, rec=13) jj
156
157  !ERROR: If DECIMAL appears, FMT or NML must also appear
158  !ERROR: If BLANK appears, FMT or NML must also appear
159  !ERROR: Invalid DECIMAL value 'Punkt'
160  read(10, decimal='Punkt', blank='null') jj
161
162  !ERROR: If ROUND appears, FMT or NML must also appear
163  !ERROR: If PAD appears, FMT or NML must also appear
164  read(10, pad='no', round='nearest') jj
165
166  !PORTABILITY: If NML appears, SIZE should not appear
167  read(10, nml=nnn, size=kk)
168  !PORTABILITY: If FMT=* appears, SIZE should not appear
169  read(10, *, size=kk) jj
170
171  !ERROR: ID kind (2) is smaller than default INTEGER kind (4)
172  read(10, id=id2, asynchronous='yes') jj
173
1749 continue
175end
176
177subroutine s(aa, n)
178  integer :: aa(5,*)
179  integer, intent(in) :: n
180  integer :: bb(10), vv(10)
181  type tt
182    real :: x, y, z
183  end type tt
184  type(tt) :: qq(20)
185
186  vv = 1
187
188  read(*, *) aa(n,1)
189  read(*, *) aa(n:n+2,2)
190  read(*, *) qq(2:5)%y
191
192  !ERROR: Input variable 'n' is not definable
193  !BECAUSE: 'n' is an INTENT(IN) dummy argument
194  read(*, *) n
195
196  !ERROR: Whole assumed-size array 'aa' may not appear here without subscripts
197  read(*, *) aa
198end
199