------- Additional Comments From schnetter at aei dot mpg dot de 2004-12-28
22:31 -------
I didn't try the putc vs. fputc change, but the patch below makes all the
difference:
$ cvs diff -u error.c
Index: error.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/fortran/error.c,v
retrieving revision 1.8
diff -u -r1.8 error.c
--- error.c 16 Sep 2004 16:00:41 -0000 1.8
+++ error.c 28 Dec 2004 22:26:52 -0000
@@ -74,6 +74,13 @@
static void
error_char (char c)
{
+ static int bufset = 0;
+ if (! bufset)
+ {
+ setvbuf (stderr, 0, _IOLBF, 0);
+ bufset = 1;
+ }
+
if (buffer_flag)
{
if (use_warning_buffer)
The call to setvbuf switches to line buffering, meaning that stderr is flushed
only after every line and not after every character. I assume that cc1 (as
opposed to f951) switches to line buffered stderr at some time, or else
outputs its error messages in some other way which is equivalent to some
internal buffering. f951 outputs its messages character by character, which
leads to an unnecessary overhead.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19182