1! Test some restrictions on the specifiers of OPEN and CLOSE statements. 2! Contributed by Francois-Xavier Coudert (coudert@clipper.ens.fr) 3! 4! { dg-do compile } 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 9 integer :: u 10 11! Test for warnings, when IOSTAT is used 12 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" } 19 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" } 24 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" } 28 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" } 33 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" } 37 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" } 41 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" } 46 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" } 51 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" } 55 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" } 59 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" } 63 64 open(10, iostat=u,access="direct",position="append") ! { dg-warning "only allowed for stream or sequential ACCESS" } 65 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" } 70 71 72 73! Test for warnings, when an ERR label is specified 74 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" } 81 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" } 86 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" } 90 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" } 95 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" } 99 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" } 103 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" } 108 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" } 113 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" } 117 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" } 121 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" } 125 126 open(10, err=99,access="direct",position="append") ! { dg-warning "only allowed for stream or sequential ACCESS" } 127 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" } 131 132 99 continue 133 134! Test for errors 135 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" } 142 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" } 147 148 open(10,blank="ZERO") 149 open(10,blank="nUlL") 150 open(10,blank="NULLL") ! { dg-error "BLANK specifier in OPEN statement" } 151 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" } 156 157 open(10,form="formatted") 158 open(10,form="unformatted") 159 open(10,form="default") ! { dg-error "FORM specifier in OPEN statement" } 160 161 open(10,pad="yes") 162 open(10,pad="no") 163 open(10,pad=foo) ! { dg-error "PAD specifier in OPEN statement" } 164 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" } 169 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" } 174 175 open(10,status="unknown") 176 open(10,status="old") 177 open(10,status=foo) ! { dg-error "STATUS specifier in OPEN statement" } 178 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" } 182 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" } 186 187 open(10,access="direct",position="append") ! { dg-error "only allowed for stream or sequential ACCESS" } 188 189 close(10,status="keep") 190 close(10,status="delete") 191 close(10,status=foo) ! { dg-error "STATUS specifier in CLOSE statement" } 192end 193