summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>2012-12-03 16:16:28 +0000
committerburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>2012-12-03 16:16:28 +0000
commit9e538e2d4fd82505004d9c4ca057ec0ad050028e (patch)
tree142725dae2b312871de2d12c5d6498e782919b6a
parent79f4a793e9c9e9c3ef7056c3d8cbec2024051322 (diff)
downloadgcc-9e538e2d4fd82505004d9c4ca057ec0ad050028e.tar.gz
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@194100 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gfortran.dg/quad_3.f9027
-rw-r--r--libquadmath/ChangeLog5
-rw-r--r--libquadmath/strtod/strtod_l.c3
4 files changed, 39 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 89e7a793583..e6fe2a00b76 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 00000000000..e29dac229b8
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/quad_3.f90
@@ -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
diff --git a/libquadmath/ChangeLog b/libquadmath/ChangeLog
index 8b052dcf390..867ab48b989 100644
--- a/libquadmath/ChangeLog
+++ b/libquadmath/ChangeLog
@@ -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
diff --git a/libquadmath/strtod/strtod_l.c b/libquadmath/strtod/strtod_l.c
index cd0c1f2da25..d1845a8039c 100644
--- a/libquadmath/strtod/strtod_l.c
+++ b/libquadmath/strtod/strtod_l.c
@@ -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'));