Index: gcc/testsuite/gfortran.dg/quad_2.f90 =================================================================== --- gcc/testsuite/gfortran.dg/quad_2.f90 (revision 231314) +++ gcc/testsuite/gfortran.dg/quad_2.f90 (working copy) @@ -49,18 +49,19 @@ program test_qp if (str4 /= "1.41421356237309504876") call abort() case (16) - if (str1 /= " 1.00000000000000000000000000000000000") call abort() - if (str2 /= "1.00000000000000000000000000000000000") call abort() - if (digits(1.0_qp) == 113) then ! IEEE 754 binary 128 format ! e.g. libquadmath/__float128 on i686/x86_64/ia64 + if (str1 /= " 1.00000000000000000000000000000000000") call abort() + if (str2 /= "1.00000000000000000000000000000000000") call abort() if (str3 /= " 1.41421356237309504880168872420969798") call abort() if (str4 /= "1.41421356237309504880168872420969798") call abort() else if (digits(1.0_qp) == 106) then ! IBM binary 128 format - if (str3(1:37) /= " 1.41421356237309504880168872420969") call abort() - if (str4(1:34) /= "1.41421356237309504880168872420969") call abort() + if (str1 /= " 1.0000000000000000000000000000000") call abort() + if (str2 /= "1.0000000000000000000000000000000") call abort() + if (str3(1:37) /= " 1.4142135623730950488016887242097") call abort() + if (str4(1:34) /= "1.4142135623730950488016887242097") call abort() end if ! Do a libm run-time test Index: libgfortran/io/write.c =================================================================== --- libgfortran/io/write.c (revision 231314) +++ libgfortran/io/write.c (working copy) @@ -1405,9 +1405,16 @@ set_fnode_default (st_parameter_dt *dtp, fnode *f, f->u.real.e = 4; break; case 16: + /* Adjust decimal precision depending on binary precision, 103 or 113. */ +#if GFC_REAL_16_DIGITS == 113 f->u.real.w = 45; f->u.real.d = 36; f->u.real.e = 4; +#else + f->u.real.w = 41; + f->u.real.d = 32; + f->u.real.e = 4; +#endif break; default: internal_error (&dtp->common, "bad real kind");