summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>2007-12-04 10:32:04 +0000
committerburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>2007-12-04 10:32:04 +0000
commitc905d3a8990ef0caa06c77ef79898aaa2e46f4e9 (patch)
tree5f2358bbfaf10b9c3d13b1e85b67b9c5db0f5d2c
parent383ec9c45ccb12c022812e479a7702eba003d809 (diff)
downloadppe42-gcc-c905d3a8990ef0caa06c77ef79898aaa2e46f4e9.tar.gz
ppe42-gcc-c905d3a8990ef0caa06c77ef79898aaa2e46f4e9.zip
2007-12-04 Tobias Burnus <burnus@net-b.de>
PR fortran/34318 * module.c (mio_gmp_real): Properly write NaN and Infinity. 2007-12-04 Tobias Burnus <burnus@net-b.de> PR fortran/34318 * gfortran.dg/module_nan.f90: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@130600 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/fortran/ChangeLog5
-rw-r--r--gcc/fortran/module.c8
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/module_nan.f9028
4 files changed, 46 insertions, 0 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 05a5a6d395b..a457fa273bc 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,8 @@
+2007-12-04 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/34318
+ * module.c (mio_gmp_real): Properly write NaN and Infinity.
+
2007-12-02 Tobias Burnus <burnus@net-b.de>
PR fortran/34186
diff --git a/gcc/fortran/module.c b/gcc/fortran/module.c
index a81067cf51d..af81c3aee7c 100644
--- a/gcc/fortran/module.c
+++ b/gcc/fortran/module.c
@@ -2535,6 +2535,14 @@ mio_gmp_real (mpfr_t *real)
else
{
p = mpfr_get_str (NULL, &exponent, 16, 0, *real, GFC_RND_MODE);
+
+ if (mpfr_nan_p (*real) || mpfr_inf_p (*real))
+ {
+ write_atom (ATOM_STRING, p);
+ gfc_free (p);
+ return;
+ }
+
atom_string = gfc_getmem (strlen (p) + 20);
sprintf (atom_string, "0.%s@%ld", p, exponent);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 8ec5307f8e5..6f7e2d929b6 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2007-12-04 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/34318
+ * gfortran.dg/module_nan.f90: New.
+
2007-12-04 Richard Sandiford <rsandifo@nildram.co.uk>
* lib/target-supports.exp (get_compiler_messages): Replace with...
diff --git a/gcc/testsuite/gfortran.dg/module_nan.f90 b/gcc/testsuite/gfortran.dg/module_nan.f90
new file mode 100644
index 00000000000..055880e5d62
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/module_nan.f90
@@ -0,0 +1,28 @@
+! { dg-do run }
+! { dg-options "-fno-range-check" }
+!
+! PR fortran/34318
+!
+! Infinity and NaN were not properly written to the .mod file.
+!
+module nonordinal
+ implicit none
+ real, parameter :: inf = 1./0., nan = 0./0., minf = -1./0.0
+end module nonordinal
+
+program a
+ use nonordinal
+ implicit none
+ character(len=20) :: str
+ if (log(abs(inf)) < huge(inf)) call abort()
+ if (log(abs(minf)) < huge(inf)) call abort()
+ if (.not. isnan(nan)) call abort()
+ write(str,*) inf
+ if (adjustl(str) /= "+Infinity") call abort()
+ write(str,*) minf
+ if (adjustl(str) /= "-Infinity") call abort()
+ write(str,*) nan
+ if (adjustl(str) /= "NaN") call abort()
+end program a
+
+! { dg-final { cleanup-modules "nonordinal" } }
OpenPOWER on IntegriCloud