I committed the following changes to gfortran's runtime library.
It converts an assert on an invalid floating-point exponent into
a runtime error.

2013-12-18  Steven G. Kargl  <ka...@gcc.gnu.org>

        * io/read.c (read_f): Convert assert to runtime error.

2013-12-18  Steven G. Kargl  <ka...@gcc.gnu.org>

        * gfortran.dg/io_err_1.f90: New test.

Index: libgfortran/io/read.c
===================================================================
--- libgfortran/io/read.c       (revision 206100)
+++ libgfortran/io/read.c       (working copy)
@@ -1150,7 +1150,9 @@ done:
          exponent = - exponent;
        }
 
-      assert (exponent < 10000);
+      if (exponent >= 10000)
+       goto bad_float;
+
       for (dig = 3; dig >= 0; --dig)
        {
          out[dig] = (char) ('0' + exponent % 10);
Index: gcc/testsuite/gfortran.dg/io_err_1.f90
===================================================================
--- gcc/testsuite/gfortran.dg/io_err_1.f90      (revision 0)
+++ gcc/testsuite/gfortran.dg/io_err_1.f90      (working copy)
@@ -0,0 +1,14 @@
+! { dg-do run }
+! { dg-shouldfail "Compile-time specifier checking" }
+!
+! Contributed by Dominique Dhumieres <dominiq at lps dot ens dot fr>
+program read
+   character(50) :: buf='0.D99999'
+   double precision val
+   read (UNIT=buf, FMT='(D60.0)', ERR=10) Val
+   call abort
+10 read (UNIT=buf, FMT='(D60.0)') Val
+end program read
+! { dg-output "At line 10 of file.*" }
+! { dg-output "Fortran runtime error: Bad value during floating point read" }
+

-- 
Steve

Reply via email to