With the patch in http://gcc.gnu.org/ml/fortran/2007-08/msg00476.html (revision 127846), some formatted output are missing the last digit on Darwin (see http://gcc.gnu.org/ml/fortran/2007-08/msg00586.html):
! { dg-do run } ! PR32554 Bug in P formatting ! Test case from the bug reporter program gfcbug66 real(8) :: x = 1.0e-100_8 character(50) :: outstr write (outstr,'(1X,2E12.3)') x, 2 * x print *, outstr if (outstr.ne." 0.100E-99 0.200E-99") call abort ! Before patch 2 * x was put out wrong write (outstr,'(1X,1P,2E12.3)') x, 2 * x print *, outstr if (outstr.ne." 1.000-100 2.000-100") call abort end program gfcbug66 output 0.100E-99 0.200E-99 1.000-10 2.000-10 Abort instead of 0.100E-99 0.200E-99 1.000-100 2.000-100 and ! { dg-do run } ! { dg-require-effective-target fortran_large_real } ! PR 24174 and PR 24305 program large_real_kind_form_io_1 ! This should be 10 on systems that support kind=10 integer, parameter :: k = selected_real_kind (precision (0.0_8) + 1) real(kind=k) :: a,b(2), c, eps complex(kind=k) :: d, e, f(2), g character(len=180) :: tmp ! Test real(k) scalar and array formatted IO eps = 10 * spacing (2.0_k) ! 10 ulp precision is enough. d = cmplx ( 1.0_k, 2.0_k, k) write (tmp, '(2(e12.4e5, 2x))') d print *, tmp read (tmp, '(2(e12.4e5, 2x))') e if (abs (e - d) > eps) call abort() end program large_real_kind_form_io_1 outputs .1000E+0000 .2000E+0000 At line 15 of file large_real_kind_form_io_1_red.f90 Fortran runtime error: Bad value during floating point read instead of .1000E+00001 .2000E+00001 Also the code print *, huge(1.0), -huge(1.0), huge(1.0d0), -huge(1.0d0) print *, nearest(huge(1.0),-1.0), nearest(-huge(1.0),1.0), nearest(huge(1.0d0),-1.0d0), nearest(-huge(1.0d0),1.0d0) print *, nearest(huge(1.0),1.0), nearest(-huge(1.0),-1.0), nearest(huge(1.0d0),1.0d0), nearest(-huge(1.0d0),-1.0d0) end gives edit_real_1_red_3.f90:3.18: print *, nearest(huge(1.0),1.0), nearest(-huge(1.0),-1.0), nearest(huge(1.0d0) 1 Error: Result of NEAREST overflows its kind at (1) edit_real_1_red_3.f90:3.42: print *, nearest(huge(1.0),1.0), nearest(-huge(1.0),-1.0), nearest(huge(1.0d0) 1 Error: Result of NEAREST overflows its kind at (1) edit_real_1_red_3.f90:3.68: print *, nearest(huge(1.0),1.0), nearest(-huge(1.0),-1.0), nearest(huge(1.0d0) 1 Error: Result of NEAREST overflows its kind at (1) edit_real_1_red_3.f90:3.96: e(1.0),1.0), nearest(-huge(1.0),-1.0), nearest(huge(1.0d0),1.0d0), nearest(-hug 1 Error: Result of NEAREST overflows its kind at (1) I was expecting no errors and 3.4028235E+38 -3.4028235E+38 1.7976931348623157E+308 -1.7976931348623157E+308 3.4028233E+38 -3.4028233E+38 1.7976931348623155E+308 -1.7976931348623155E+308 +Inf -Inf +Inf -Inf If I remove the offending line, the output is: 3.4028235E+38 -3.4028235E+38 1.797693134862316E+30 -1.797693134862316E+30 3.4028233E+38 -3.4028233E+38 1.797693134862316E+30 -1.797693134862316E+30 Due to this regression, the tests gfortran.dg/fmt_p_1.f90, gfortran.dg/output_exponents_1.f90, and gfortran.dg/large_real_kind_form_io_1.f90 fail on PPC Darwin. -- Summary: [4.3 regression] Missing last digit is some formatted output Product: gcc Version: 4.3.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: libfortran AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: dominiq at lps dot ens dot fr GCC target triplet: powerpc-apple-darwin8 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33225