http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46373

Jerry DeLisle <jvdelisle at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|WAITING                     |ASSIGNED
         AssignedTo|unassigned at gcc dot       |jvdelisle at gcc dot
                   |gnu.org                     |gnu.org

--- Comment #5 from Jerry DeLisle <jvdelisle at gcc dot gnu.org> 2010-11-09 
13:22:15 UTC ---
In Fortran, by definition, "internal unit" is a character string. Libgfortran
defines a common I/O interface.  During initialization of an I/O call, the
appropriate functions are mapped via function pointers so that when the
read/write statements are executed, either the external unit (file) routines or
internal unit (string) routines are invoked.

Regardless, I misunderstood your original post.  I will commit the following
obvious patch after regression testing. At least the code lived up to its
comment.  ;)

Index: libgfortran/io/transfer.c
===================================================================
--- libgfortran/io/transfer.c    (revision 166469)
+++ libgfortran/io/transfer.c    (working copy)
@@ -2646,7 +2646,8 @@
     }

   /* Bugware for badly written mixed C-Fortran I/O.  */
-  flush_if_preconnected(dtp->u.p.current_unit->s);
+  if (!is_internal_unit (dtp))
+    flush_if_preconnected(dtp->u.p.current_unit->s);

   dtp->u.p.current_unit->mode = dtp->u.p.mode;

Reply via email to