1 ! Test some restrictions on the specifiers of OPEN and CLOSE statements.
2 ! Contributed by Francois-Xavier Coudert (coudert@clipper.ens.fr)
5 ! { dg-options "-ffree-line-length-none -pedantic -fmax-errors=50" }
6 integer,parameter :: mone
= -1, zero
= 0
7 character(len
=*),parameter :: foo
= "foo"
8 character(len
=20) :: str
11 ! Test for warnings, when IOSTAT is used
13 open(10, iostat
=u
,access
="sequential ")
14 open(10, iostat
=u
,access
="sequential u") ! { dg-warning "ACCESS specifier in OPEN statement" }
15 open(10, iostat
=u
,access
=foo
) ! { dg-warning "ACCESS specifier in OPEN statement" }
16 open(10, iostat
=u
,access
="direct")
17 open(10, iostat
=u
,access
="stream")
18 open(10, iostat
=u
,access
="append") ! { dg-warning "Extension: ACCESS specifier in OPEN statement" }
20 open(10, iostat
=u
,action
="read")
21 open(10, iostat
=u
,action
="write")
22 open(10, iostat
=u
,action
="readwrite")
23 open(10, iostat
=u
,action
=foo
) ! { dg-warning "ACTION specifier in OPEN statement" }
25 open(10, iostat
=u
,blank
="ZERO")
26 open(10, iostat
=u
,blank
="nUlL")
27 open(10, iostat
=u
,blank
="NULLL") ! { dg-warning "BLANK specifier in OPEN statement" }
29 open(10, iostat
=u
,delim
="apostrophe")
30 open(10, iostat
=u
,delim
="quote")
31 open(10, iostat
=u
,delim
="none")
32 open(10, iostat
=u
,delim
="") ! { dg-warning "DELIM specifier in OPEN statement" }
34 open(10, iostat
=u
,form
="formatted")
35 open(10, iostat
=u
,form
="unformatted")
36 open(10, iostat
=u
,form
="default") ! { dg-warning "FORM specifier in OPEN statement" }
38 open(10, iostat
=u
,pad
="yes")
39 open(10, iostat
=u
,pad
="no")
40 open(10, iostat
=u
,pad
=foo
) ! { dg-warning "PAD specifier in OPEN statement" }
42 open(10, iostat
=u
,position
="asis")
43 open(10, iostat
=u
,position
="rewind")
44 open(10, iostat
=u
,position
="append")
45 open(10, iostat
=u
,position
=foo
) ! { dg-warning "POSITION specifier in OPEN statement" }
47 open(10, iostat
=u
,recl
="ee") ! { dg-error "must be of type INTEGER" }
48 open(10, iostat
=u
,recl
=0.4) ! { dg-error "must be of type INTEGER" }
49 open(10, iostat
=u
,recl
=zero
) ! { dg-warning "must be positive" }
50 open(10, iostat
=u
,recl
=mone
) ! { dg-warning "must be positive" }
52 open(10, iostat
=u
,status
="unknown")
53 open(10, iostat
=u
,status
="old")
54 open(10, iostat
=u
,status
=foo
) ! { dg-warning "STATUS specifier in OPEN statement" }
56 open(10, iostat
=u
,status
="new") ! { dg-warning "no FILE specifier is present" }
57 open(10, iostat
=u
,status
="replace ") ! { dg-warning "no FILE specifier is present" }
58 open(10, iostat
=u
,status
="scratch",file
=str
) ! { dg-warning "cannot have the value SCRATCH if a FILE specifier is present" }
60 open(10, iostat
=u
,form
="unformatted",delim
="none") ! { dg-warning "not allowed in OPEN statement for unformatted I/O" }
61 open(10, iostat
=u
,form
="unformatted",pad
="yes") ! { dg-warning "not allowed in OPEN statement for unformatted I/O" }
62 open(10, iostat
=u
,form
="unformatted",blank
="null") ! { dg-warning "not allowed in OPEN statement for unformatted I/O" }
64 open(10, iostat
=u
,access
="direct",position
="append") ! { dg-warning "only allowed for stream or sequential ACCESS" }
66 close(10, iostat
=u
,status
="keep")
67 close(10, iostat
=u
,status
="delete")
68 close(10, iostat
=u
,status
=foo
) ! { dg-warning "STATUS specifier in CLOSE statement" }
69 close(iostat
=u
) ! { dg-error "requires a UNIT number" }
73 ! Test for warnings, when an ERR label is specified
75 open(10, err
=99,access
="sequential ")
76 open(10, err
=99,access
="sequential u") ! { dg-warning "ACCESS specifier in OPEN statement" }
77 open(10, err
=99,access
=foo
) ! { dg-warning "ACCESS specifier in OPEN statement" }
78 open(10, err
=99,access
="direct")
79 open(10, err
=99,access
="stream")
80 open(10, err
=99,access
="append") ! { dg-warning "Extension: ACCESS specifier in OPEN statement" }
82 open(10, err
=99,action
="read")
83 open(10, err
=99,action
="write")
84 open(10, err
=99,action
="readwrite")
85 open(10, err
=99,action
=foo
) ! { dg-warning "ACTION specifier in OPEN statement" }
87 open(10, err
=99,blank
="ZERO")
88 open(10, err
=99,blank
="nUlL")
89 open(10, err
=99,blank
="NULLL") ! { dg-warning "BLANK specifier in OPEN statement" }
91 open(10, err
=99,delim
="apostrophe")
92 open(10, err
=99,delim
="quote")
93 open(10, err
=99,delim
="none")
94 open(10, err
=99,delim
="") ! { dg-warning "DELIM specifier in OPEN statement" }
96 open(10, err
=99,form
="formatted")
97 open(10, err
=99,form
="unformatted")
98 open(10, err
=99,form
="default") ! { dg-warning "FORM specifier in OPEN statement" }
100 open(10, err
=99,pad
="yes")
101 open(10, err
=99,pad
="no")
102 open(10, err
=99,pad
=foo
) ! { dg-warning "PAD specifier in OPEN statement" }
104 open(10, err
=99,position
="asis")
105 open(10, err
=99,position
="rewind")
106 open(10, err
=99,position
="append")
107 open(10, err
=99,position
=foo
) ! { dg-warning "POSITION specifier in OPEN statement" }
109 open(10, err
=99,recl
="ee") ! { dg-error "must be of type INTEGER" }
110 open(10, err
=99,recl
=0.4) ! { dg-error "must be of type INTEGER" }
111 open(10, err
=99,recl
=zero
) ! { dg-warning "must be positive" }
112 open(10, err
=99,recl
=mone
) ! { dg-warning "must be positive" }
114 open(10, err
=99,status
="unknown")
115 open(10, err
=99,status
="old")
116 open(10, err
=99,status
=foo
) ! { dg-warning "STATUS specifier in OPEN statement" }
118 open(10, err
=99,status
="new") ! { dg-warning "no FILE specifier is present" }
119 open(10, err
=99,status
="replace ") ! { dg-warning "no FILE specifier is present" }
120 open(10, err
=99,status
="scratch",file
=str
) ! { dg-warning "cannot have the value SCRATCH if a FILE specifier is present" }
122 open(10, err
=99,form
="unformatted",delim
="none") ! { dg-warning "not allowed in OPEN statement for unformatted I/O" }
123 open(10, err
=99,form
="unformatted",pad
="yes") ! { dg-warning "not allowed in OPEN statement for unformatted I/O" }
124 open(10, err
=99,form
="unformatted",blank
="null") ! { dg-warning "not allowed in OPEN statement for unformatted I/O" }
126 open(10, err
=99,access
="direct",position
="append") ! { dg-warning "only allowed for stream or sequential ACCESS" }
128 close(10, err
=99,status
="keep")
129 close(10, err
=99,status
="delete")
130 close(10, err
=99,status
=foo
) ! { dg-warning "STATUS specifier in CLOSE statement" }
136 open(10,access
="sequential ")
137 open(10,access
="sequential u") ! { dg-error "ACCESS specifier in OPEN statement" }
138 open(10,access
=foo
) ! { dg-error "ACCESS specifier in OPEN statement" }
139 open(10,access
="direct")
140 open(10,access
="stream")
141 open(10,access
="append") ! { dg-warning "Extension: ACCESS specifier in OPEN statement" }
143 open(10,action
="read")
144 open(10,action
="write")
145 open(10,action
="readwrite")
146 open(10,action
=foo
) ! { dg-error "ACTION specifier in OPEN statement" }
148 open(10,blank
="ZERO")
149 open(10,blank
="nUlL")
150 open(10,blank
="NULLL") ! { dg-error "BLANK specifier in OPEN statement" }
152 open(10,delim
="apostrophe")
153 open(10,delim
="quote")
154 open(10,delim
="none")
155 open(10,delim
="") ! { dg-error "DELIM specifier in OPEN statement" }
157 open(10,form
="formatted")
158 open(10,form
="unformatted")
159 open(10,form
="default") ! { dg-error "FORM specifier in OPEN statement" }
163 open(10,pad
=foo
) ! { dg-error "PAD specifier in OPEN statement" }
165 open(10,position
="asis")
166 open(10,position
="rewind")
167 open(10,position
="append")
168 open(10,position
=foo
) ! { dg-error "POSITION specifier in OPEN statement" }
170 open(10,recl
="ee") ! { dg-error "must be of type INTEGER" }
171 open(10,recl
=0.4) ! { dg-error "must be of type INTEGER" }
172 open(10,recl
=zero
) ! { dg-error "must be positive" }
173 open(10,recl
=mone
) ! { dg-error "must be positive" }
175 open(10,status
="unknown")
176 open(10,status
="old")
177 open(10,status
=foo
) ! { dg-error "STATUS specifier in OPEN statement" }
179 open(10,status
="new") ! { dg-error "no FILE specifier is present" }
180 open(10,status
="replace ") ! { dg-error "no FILE specifier is present" }
181 open(10,status
="scratch",file
=str
) ! { dg-error "cannot have the value SCRATCH if a FILE specifier is present" }
183 open(10,form
="unformatted",delim
="none") ! { dg-error "not allowed in OPEN statement for unformatted I/O" }
184 open(10,form
="unformatted",pad
="yes") ! { dg-error "not allowed in OPEN statement for unformatted I/O" }
185 open(10,form
="unformatted",blank
="null") ! { dg-error "not allowed in OPEN statement for unformatted I/O" }
187 open(10,access
="direct",position
="append") ! { dg-error "only allowed for stream or sequential ACCESS" }
189 close(10,status
="keep")
190 close(10,status
="delete")
191 close(10,status
=foo
) ! { dg-error "STATUS specifier in CLOSE statement" }