PR libfortran/pr68867
authorJerry DeLisle <jvdelisle@gcc.gnu.org>
Tue, 15 Dec 2015 03:16:26 +0000 (03:16 +0000)
committerJerry DeLisle <jvdelisle@gcc.gnu.org>
Tue, 15 Dec 2015 03:16:26 +0000 (03:16 +0000)
2015-12-14  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

PR libfortran/pr68867
* io/write.c (set_fnode_default): For kind=16, set the decimal precision
depending on the platform binary precision, 106 or 113.

From-SVN: r231639

gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/quad_2.f90
libgfortran/ChangeLog
libgfortran/io/write.c

index a4d593b217a468550bbaea58bc092e3122ec9da0..c2a5d8e1bf28d5b9265a5d53baa7d34bfa8c1470 100644 (file)
@@ -1,3 +1,7 @@
+2015-12-14svn commit   Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       * gfortran.dg/quad_2.f90: Update test.
+
 2015-12-14  Steve Ellcey  <sellcey@imgtec.com>
 
        * gcc.dg/tree-ssa/ssa-fre-4.c: Remove mips*-*-* target.
index 1b3f918f83a484c082d4f2197686c2c441358c73..f7a8a469861f8a0e8ba17464c12869d70076f9fb 100644 (file)
@@ -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 b8c698e28bb09c70b305d02cce752e263c4c1f37..2aca878cd770dcc239b01ad061b198131e00c0f4 100644 (file)
@@ -1,3 +1,9 @@
+2015-12-14  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       PR libfortran/pr68867
+       * io/write.c (set_fnode_default): For kind=16, set the decimal precision
+       depending on the platform binary precision, 106 or 113.
+
 2015-12-05  Juoko Orava <jouko.orava@iki.fi>
 
        PR fortran/50201
index 6656c9768158daefdbf475f84d6b125c98c46913..f72b4828aa6d3f8ae6dad209c8533fe89d484080 100644 (file)
@@ -1405,9 +1405,16 @@ set_fnode_default (st_parameter_dt *dtp, fnode *f, int length)
       f->u.real.e = 4;
       break;
     case 16:
+      /* Adjust decimal precision depending on binary precision, 106 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");