https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63352
--- Comment #1 from Richard PALO <richard at netbsd dot org> --- This seems to be a bug in the write formatting for g0 Here is the compile with -fdump-parse-tree showing that the constant expression is calculated exactly as '3.3333333333333331e-1_8' Namespace: A-H: (REAL 4) I-N: (INTEGER 4) O-Z: (REAL 4) procedure name = MAIN__ symtree: 'MAIN__' || symbol: 'MAIN__' type spec : (UNKNOWN 0) attributes: (PROGRAM PUBLIC SUBROUTINE) symtree: 'abort' || symbol: 'abort' type spec : (UNKNOWN 0) attributes: (PROCEDURE SUBROUTINE) symtree: 'buffer' || symbol: 'buffer' type spec : (CHARACTER 50 1) attributes: (VARIABLE ) symtree: 'string' || symbol: 'string' type spec : (CHARACTER 25 1) attributes: (VARIABLE IMPLICIT-SAVE) value: '(g0,g0,g0) ' code: WRITE UNIT=MAIN__:buffer FMT='(g0,g0,g0)' TRANSFER ':' TRANSFER 12340 TRANSFER ':' DT_END IF (/= MAIN__:buffer ':12340:') CALL _gfortran_abort () ENDIF WRITE UNIT=MAIN__:buffer FMT=MAIN__:string TRANSFER ':' TRANSFER 0 TRANSFER ':' DT_END IF (/= MAIN__:buffer ':0:') CALL _gfortran_abort () ENDIF WRITE UNIT=MAIN__:buffer FMT=MAIN__:string TRANSFER ':' TRANSFER 3.3333333333333331e-1_8 TRANSFER ':' DT_END IF (/= MAIN__:buffer ':.33333333333333331:') CALL _gfortran_abort () ENDIF WRITE UNIT=MAIN__:buffer FMT='(1x,a,g0,a)' TRANSFER ':' TRANSFER 3.3333333333333331e-1_8 TRANSFER ':' DT_END IF (/= MAIN__:buffer ' :.33333333333333331:') CALL _gfortran_abort () ENDIF WRITE UNIT=MAIN__:buffer FMT=MAIN__:string TRANSFER ':' TRANSFER 'hello' TRANSFER ':' DT_END IF (/= MAIN__:buffer ':hello:') CALL _gfortran_abort () ENDIF WRITE UNIT=MAIN__:buffer FMT='(g0,g0,g0,g0)' TRANSFER ':' TRANSFER .true. TRANSFER .false. TRANSFER ':' DT_END IF (/= MAIN__:buffer ':TF:') CALL _gfortran_abort () ENDIF WRITE UNIT=MAIN__:buffer FMT='(g0,g0,'','',g0,g0)' TRANSFER '(' TRANSFER (complex 1.2344999999999999_8 2.4567000000000001_8) TRANSFER ')' DT_END IF (/= MAIN__:buffer '(1.2344999999999999,2.4567000000000001)') CALL _gfortran_abort () ENDIF