------- Comment #7 from burnus at gcc dot gnu dot org 2009-10-13 15:39 ------- (In reply to comment #0) > The following is rejected by gfortran. I think it is valid. > real i > read(unit=2, 100) i > 100 format (f10.7)
In case of Fortran 95 it is trivially invalid (cf. comment 3 and comment 5). In case of Fortran 2003/2008 one has: R913 io-control-spec is [ UNIT = ] io-unit or [ FMT = ] format or [ NML = ] namelist-group-name (long list of other arguments with required keyword specifier) C910 (R913) An io-unit shall be specified; if the optional characters UNIT= are omitted, the io-unit shall be the first item in the io-control-spec-list. C917 (R913) If format appears without a preceding FMT=, it shall be the second item in the io-control-spec-list and the first item shall be io-unit. C918 (R913) If namelist-group-name appears without a preceding NML=, it shall be the second item in the io-control-spec-list and the first item shall be io-unit. R901 io-unit is file-unit-number or * or internal-file-variable Thus it seems to be allowed. The only question is whether "the first item shall be io-unit" is only fulfilled when it is not specified with keyword specifier, i.e. whether "the first item shall be io-unit" is not fulfilled by "unit=2" and only by "2". My reading is that it applies to both and that thus the example is _valid_. (I think the allowing this syntax is a bit counterintuitive compared to the common syntax in Fortran, but it is implementable. Possibly it is something which has been unintentionally changed but won't be corrected as it is implementable.) It would be interesting to get the opinion of Richard Maine. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41678