aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJerry DeLisle <jvdelisle@gcc.gnu.org>2011-04-15 16:33:07 +0000
committerJerry DeLisle <jvdelisle@gcc.gnu.org>2011-04-15 16:33:07 +0000
commitb8388bb06202fa5a007193f189d8a4dc24b98f6c (patch)
tree4a8bf848067ae54e9789178558daf307084ebb88
parent0b0a0c945fad9f4a8ec83c4eabd9e141294d6ea5 (diff)
downloadgcc-b8388bb06202fa5a007193f189d8a4dc24b98f6c.zip
gcc-b8388bb06202fa5a007193f189d8a4dc24b98f6c.tar.gz
gcc-b8388bb06202fa5a007193f189d8a4dc24b98f6c.tar.bz2
re PR libfortran/48589 (Invalid G0/G0.d editing for NaN/infinity)
2011-04-15 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR libgfortran/48589 * gfortran.dg/fmt_g0_5.f08: New test. From-SVN: r172503
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/fmt_g0_5.f0838
2 files changed, 43 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index fe84eb0..0cb6d3a 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2011-04-15 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ PR libgfortran/48589
+ * gfortran.dg/fmt_g0_5.f08: New test.
+
2011-04-15 Richard Guenther <rguenther@suse.de>
PR testsuite/48286
diff --git a/gcc/testsuite/gfortran.dg/fmt_g0_5.f08 b/gcc/testsuite/gfortran.dg/fmt_g0_5.f08
new file mode 100644
index 0000000..a7ec0f17
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/fmt_g0_5.f08
@@ -0,0 +1,38 @@
+! { dg-do run }
+! PR48589 Invalid G0/G0.d editing for NaN/infinity
+! Test case by Thomas Henlich
+program test_g0_special
+
+ call check_all("(g10.3)", "(f10.3)")
+ call check_all("(g10.3e3)", "(f10.3)")
+ call check_all("(spg10.3)", "(spf10.3)")
+ call check_all("(spg10.3e3)", "(spf10.3)")
+ !print *, "-----------------------------------"
+ call check_all("(g0)", "(f0.0)")
+ call check_all("(g0.15)", "(f0.0)")
+ call check_all("(spg0)", "(spf0.0)")
+ call check_all("(spg0.15)", "(spf0.0)")
+contains
+ subroutine check_all(fmt1, fmt2)
+ character(len=*), intent(in) :: fmt1, fmt2
+ real(8) :: one = 1.0D0, zero = 0.0D0, nan, pinf, minf
+
+ nan = zero / zero
+ pinf = one / zero
+ minf = -one / zero
+ call check_equal(fmt1, fmt2, nan)
+ call check_equal(fmt1, fmt2, pinf)
+ call check_equal(fmt1, fmt2, minf)
+ end subroutine check_all
+ subroutine check_equal(fmt1, fmt2, r)
+ real(8), intent(in) :: r
+ character(len=*), intent(in) :: fmt1, fmt2
+ character(len=80) :: s1, s2
+
+ write(s1, fmt1) r
+ write(s2, fmt2) r
+ if (s1 /= s2) call abort
+ !if (s1 /= s2) print "(6a)", trim(fmt1), ": '", trim(s1), "' /= '", trim(s2), "'"
+ !print "(6a)", trim(fmt1), ": '", trim(s1), "' /= '", trim(s2), "'"
+ end subroutine check_equal
+end program test_g0_special