diff options
author | burnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-12-04 10:32:04 +0000 |
---|---|---|
committer | burnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-12-04 10:32:04 +0000 |
commit | c905d3a8990ef0caa06c77ef79898aaa2e46f4e9 (patch) | |
tree | 5f2358bbfaf10b9c3d13b1e85b67b9c5db0f5d2c | |
parent | 383ec9c45ccb12c022812e479a7702eba003d809 (diff) | |
download | ppe42-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/fortran/module.c | 8 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/module_nan.f90 | 28 |
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" } } |