re PR libfortran/19155 ([4.0 only] blanks not treated as zeros in 'E' format read...
authorFrancois-Xavier Coudert <coudert@clipper.ens.fr>
Mon, 9 May 2005 11:21:01 +0000 (13:21 +0200)
committerFrançois-Xavier Coudert <fxcoudert@gcc.gnu.org>
Mon, 9 May 2005 11:21:01 +0000 (11:21 +0000)
PR libfortran/19155
* io/read.c (read_f): Accept 'e', 'E', 'd' and 'D' as first
non-blank characters of a real number.
* gfortran.dg/pr19155.f: New test.

From-SVN: r99424

gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/pr19155.f [new file with mode: 0644]
libgfortran/ChangeLog
libgfortran/io/unix.c

index 48d9936..b83ef7c 100644 (file)
@@ -1,3 +1,8 @@
+2005-05-09  Francois-Xavier Coudert  <coudert@clipper.ens.fr>
+
+       PR libfortran/19155
+       * gfortran.dg/pr19155.f: New test.
+
 2005-05-08  Roger Sayle  <roger@eyesopen.com>
 
        PR inline-asm/8788
diff --git a/gcc/testsuite/gfortran.dg/pr19155.f b/gcc/testsuite/gfortran.dg/pr19155.f
new file mode 100644 (file)
index 0000000..ccd3915
--- /dev/null
@@ -0,0 +1,15 @@
+! { dg-do run }
+!
+! PR libfortran/19155
+! We accept 'E+00' as a valid real number. The standard says it is not,
+! but doesn't require us to issue an error. Since g77 accepts this as zero,
+! we do the same.
+      real a
+      a = 42
+      open (19,status='scratch')
+      write (19,'(A15)') 'E+00'
+      rewind (19)
+      read (19,'(E15.8)') a
+      if (a .ne. 0) call abort
+      close (19)
+      end
index 3e0b361..c91b98c 100644 (file)
@@ -1,3 +1,9 @@
+2005-05-09  Francois-Xavier Coudert  <coudert@clipper.ens.fr>
+
+       PR libfortran/19155
+       * io/read.c (read_f): Accept 'e', 'E', 'd' and 'D' as first
+       non-blank characters of a real number.
+
 2005-05-04  Thomas Koenig  <Thomas.Koenig@online.de>
 
        PR libfortran/21354
index 78ed0f7..865eb68 100644 (file)
@@ -892,7 +892,7 @@ open_internal (char *base, int length)
  * around it. */
 
 static stream *
-fd_to_stream (int fd, int prot)
+fd_to_stream (int fd, int prot, int avoid_mmap)
 {
   struct stat statbuf;
   unix_stream *s;
@@ -911,7 +911,10 @@ fd_to_stream (int fd, int prot)
   s->file_length = S_ISREG (statbuf.st_mode) ? statbuf.st_size : -1;
 
 #if HAVE_MMAP
-  mmap_open (s);
+  if (avoid_mmap)
+    fd_open (s);
+  else
+    mmap_open (s);
 #else
   fd_open (s);
 #endif
@@ -1153,7 +1156,7 @@ open_external (unit_flags *flags)
       internal_error ("open_external(): Bad action");
     }
 
-  return fd_to_stream (fd, prot);
+  return fd_to_stream (fd, prot, 0);
 }
 
 
@@ -1163,7 +1166,7 @@ open_external (unit_flags *flags)
 stream *
 input_stream (void)
 {
-  return fd_to_stream (STDIN_FILENO, PROT_READ);
+  return fd_to_stream (STDIN_FILENO, PROT_READ, 1);
 }
 
 
@@ -1173,7 +1176,7 @@ input_stream (void)
 stream *
 output_stream (void)
 {
-  return fd_to_stream (STDOUT_FILENO, PROT_WRITE);
+  return fd_to_stream (STDOUT_FILENO, PROT_WRITE, 1);
 }
 
 
@@ -1183,7 +1186,7 @@ output_stream (void)
 stream *
 error_stream (void)
 {
-  return fd_to_stream (STDERR_FILENO, PROT_WRITE);
+  return fd_to_stream (STDERR_FILENO, PROT_WRITE, 1);
 }
 
 /* init_error_stream()-- Return a pointer to the error stream.  This