1! { dg-do run } 2! { dg-add-options ieee } 3! PR48589 Invalid G0/G0.d editing for NaN/infinity 4! Test case by Thomas Henlich 5program test_g0_special 6 7 call check_all("(g10.3)", "(f10.3)") 8 call check_all("(g10.3e3)", "(f10.3)") 9 call check_all("(spg10.3)", "(spf10.3)") 10 call check_all("(spg10.3e3)", "(spf10.3)") 11 !print *, "-----------------------------------" 12 call check_all("(g0)", "(f0.0)") 13 call check_all("(g0.15)", "(f0.0)") 14 call check_all("(spg0)", "(spf0.0)") 15 call check_all("(spg0.15)", "(spf0.0)") 16contains 17 subroutine check_all(fmt1, fmt2) 18 character(len=*), intent(in) :: fmt1, fmt2 19 real(8) :: one = 1.0D0, zero = 0.0D0, nan, pinf, minf 20 21 nan = zero / zero 22 pinf = one / zero 23 minf = -one / zero 24 call check_equal(fmt1, fmt2, nan) 25 call check_equal(fmt1, fmt2, pinf) 26 call check_equal(fmt1, fmt2, minf) 27 end subroutine check_all 28 subroutine check_equal(fmt1, fmt2, r) 29 real(8), intent(in) :: r 30 character(len=*), intent(in) :: fmt1, fmt2 31 character(len=80) :: s1, s2 32 33 write(s1, fmt1) r 34 write(s2, fmt2) r 35 if (s1 /= s2) call abort 36 !if (s1 /= s2) print "(6a)", trim(fmt1), ": '", trim(s1), "' /= '", trim(s2), "'" 37 !print "(6a)", trim(fmt1), ": '", trim(s1), "' /= '", trim(s2), "'" 38 end subroutine check_equal 39end program test_g0_special 40