https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61632

--- Comment #15 from Dominique d'Humieres <dominiq at lps dot ens.fr> ---
> Its sort of like Steve said earlier.  The coder is choosing to ignore an
> error condition so anything gfortran does is valid.  In this case the
> output got writen to buffer before the error occurred.  You are bypassing
> all of the normal error handling when you do this. The buffer got flushed.
>
> Its not worth the time to change any of it really.
>
> The program should exit, its invalid.

Well, I disagree with this interpretation: I did not find anywhere in the
standard that the variable set by iostat has to be used. In addition, the
following code should be valid upon Steve's rules and still prints 'YYY' (g95
does not).

[Book15] f90/bug% cat pr61632_1_red.f90
      program p
      call ss0()
      end program p
      subroutine ss0
      CHARACTER(3), save :: ZTYP(3)
      DATA ZTYP /'XXX','YYY','ZZZ'/
      write(*,600,ERR=10,IOSTAT=iosa) 'AAA',0.0,ZTYP
 600  FORMAT(A3,1PE13.5,A3)
      print *, 'success'
      return

 10   print *,
      print *, 'iostat =', iosa
      end subroutine ss0
[Book15] f90/bug% a.out
AAA  0.00000E+00XXX
YYY
 iostat =        5006

IMO this PR boils down to the fact that the I/O processing is not reset to a
clean state after an error is handled with ERR, IOSTAT, ... , as it should.

Along this line, I have found that 'parse_format' is called only once even if
'ss' is called twice.

Reply via email to