+2005-10-30 Francois-Xavier Coudert <coudert@clipper.ens.fr>
+
+ PR libfortran/20179
+ * gfortran.dg/mixed_io_1.f90: New test.
+ * gfortran.dg/mixed_io_1.c: New file.
+
+2005-10-30 Francois-Xavier Coudert <coudert@clipper.ens.fr>
+
+ * gfortran.dg/malloc_free_1.f90: New test.
+
2005-10-29 Hans-Peter Nilsson <hp@axis.com>
* gcc.dg/nested-func-4.c: Require profiling -pg.
--- /dev/null
+#include <stdio.h>
+void cio_(void){
+ printf("12345");
+}
--- /dev/null
+! { dg-do run }
+! { dg-additional-sources mixed_io_1.c }
+ call cio
+ write(*,"(A)") '6789' ! { dg-output "123456789" }
+ end
+2005-10-30 Francois-Xavier Coudert <coudert@clipper.ens.fr>
+
+ PR libfortran/20179
+ * io/unix.c (flush_if_preconnected): New function.
+ * io/io.h: Add prototype for flush_if_preconnected.
+ * io/transfer.c (data_transfer_init): Use flush_if_preconnected
+ to workaround buggy mixed C-Fortran code.
+
2005-10-30 Francois-Xavier Coudert <coudert@clipper.ens.fr>
* Makefile.am: Add intrinsics/malloc.c file.
extern int is_preconnected (stream *);
internal_proto(is_preconnected);
+extern void flush_if_preconnected (stream *);
+internal_proto(flush_if_preconnected);
+
extern void empty_internal_buffer(stream *);
internal_proto(empty_internal_buffer);
&& current_unit->last_record == 0 && !is_preconnected(current_unit->s))
struncate(current_unit->s);
+ /* Bugware for badly written mixed C-Fortran I/O. */
+ flush_if_preconnected(current_unit->s);
+
current_unit->mode = g.mode;
/* Set the initial value of flags. */
return 0;
}
+/* If the stream corresponds to a preconnected unit, we flush the
+ corresponding C stream. This is bugware for mixed C-Fortran codes
+ where the C code doesn't flush I/O before returning. */
+void
+flush_if_preconnected (stream * s)
+{
+ int fd;
+
+ fd = ((unix_stream *) s)->fd;
+ if (fd == STDIN_FILENO)
+ fflush (stdin);
+ else if (fd == STDOUT_FILENO)
+ fflush (stdout);
+ else if (fd == STDERR_FILENO)
+ fflush (stderr);
+}
+
/* Reset a stream after reading/writing. Assumes that the buffers have
been flushed. */