]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
strtod_l.c (___STRTOF_INTERNAL): Fix exponent reading.
authorTobias Burnus <burnus@net-b.de>
Mon, 3 Dec 2012 16:16:28 +0000 (17:16 +0100)
committerTobias Burnus <burnus@gcc.gnu.org>
Mon, 3 Dec 2012 16:16:28 +0000 (17:16 +0100)
2012-12-03  Tobias Burnus  <burnus@net-b.de>

        * strtod/strtod_l.c (___STRTOF_INTERNAL): Fix exponent
        reading.

2012-12-03  Tobias Burnus  <burnus@net-b.de>

        * gfortran.dg/quad_3.f90: New.

From-SVN: r194100

gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/quad_3.f90 [new file with mode: 0644]
libquadmath/ChangeLog
libquadmath/strtod/strtod_l.c

index 89e7a7935830b7cddec97032923103613b666c0b..e6fe2a00b7659d963db02bd95a325cd9a676c11c 100644 (file)
@@ -1,3 +1,7 @@
+2012-12-03  Tobias Burnus  <burnus@net-b.de>
+
+       * gfortran.dg/quad_3.f90: New.
+
 2012-12-03  Paolo Carlini  <paolo.carlini@oracle.com>
 
        PR c++/54170
diff --git a/gcc/testsuite/gfortran.dg/quad_3.f90 b/gcc/testsuite/gfortran.dg/quad_3.f90
new file mode 100644 (file)
index 0000000..e29dac2
--- /dev/null
@@ -0,0 +1,27 @@
+! { dg-do run }
+!
+! I/O test for REAL(16)
+!
+! Contributed by Dominique d'Humieres
+!
+program test_qp
+   use iso_fortran_env, only: real_kinds
+   implicit none
+   integer, parameter :: QP = real_kinds(ubound(real_kinds,dim=1))
+   real(kind=qp) :: a,b(2), c
+   integer :: exponent
+   character(len=180) :: tmp
+
+   ! Run this only with libquadmath; assume that all those systems
+   ! have also kind=10.
+   if (size (real_kinds) >= 4 .and. real_kinds(3) == 10 .and. qp == 16) then
+     exponent = 4000
+     b(:) = huge (1.0_qp)/10.0_qp**exponent
+!     print *, 'real(16) big value:      ', b(1)
+     write (tmp, *) b
+     read (tmp, *) a, c
+!     print *, 'same value read again:   ', a, c
+!     print *, 'difference: looks OK now ', a-b(1)
+     if (a-b(1) /= 0.0_qp .or. c-b(1) /= 0.0_qp) call abort()
+   end if
+end program test_qp
index 8b052dcf3903a8bd9f7ce4ba9b685563d3daf7d4..867ab48b989a3d243e884a4573abac37f8970499 100644 (file)
@@ -1,3 +1,8 @@
+2012-12-03  Tobias Burnus  <burnus@net-b.de>
+
+       * strtod/strtod_l.c (___STRTOF_INTERNAL): Fix exponent
+       reading.
+
 2012-11-25  Tobias Burnus  <burnus@net-b.de>
 
        PR libquadmath/55462
index cd0c1f2da252da0deee315ea7b5d6d13c9453b6b..d1845a8039c8cbdcffe12923ecb77d832f5b0eea 100644 (file)
@@ -1005,6 +1005,9 @@ ____STRTOF_INTERNAL (nptr, endptr, group)
                  /* NOTREACHED */
                }
 
+             exponent *= 10;
+             exponent += c - L_('0');
+
              c = *++cp;
            }
          while (c >= L_('0') && c <= L_('9'));