use of %n in genmodes.c causes trouble on Vista
Paolo Bonzini
bonzini@gnu.org
Wed Jun 6 15:27:00 GMT 2007
> Or, if we think that other systems are likely to also start disabling
> %n by default, then it would make sense for us to change the code. It
> would be easy to replace it with strlen calls, or, as you suggest, by
> checking the return value of printf. The return value of printf is
> portable (unlike the return value of sprintf).
This would be pretty easy:
2007-06-06 Paolo Bonzini <bonzini@gnu.org>
* genmodes.c (tagged_printf, emit_insn_modes_h): Don't
use %n on printf.
Index: genmodes.c
===================================================================
--- genmodes.c (revision 125260)
+++ genmodes.c (working copy)
@@ -786,8 +786,7 @@ calc_wider_mode (void)
/* Output routines. */
#define tagged_printf(FMT, ARG, TAG) do { \
- int count_; \
- printf (" " FMT ",%n", ARG, &count_); \
+ int count_ = printf (" " FMT ",", ARG); \
printf ("%*s/* %s */\n", 27 - count_, "", TAG); \
} while (0)
@@ -821,8 +820,7 @@ enum machine_mode\n{");
for (c = 0; c < MAX_MODE_CLASS; c++)
for (m = modes[c]; m; m = m->next)
{
- int count_;
- printf (" %smode,%n", m->name, &count_);
+ int count_ = printf (" %smode,", m->name);
printf ("%*s/* %s:%d */\n", 27 - count_, "",
trim_filename (m->file), m->line);
}
Tested with "make s-modes s-modes-h s-modes-m" and comparing the MD5 of
the *modes*.* files before and after (since the only changes would be in
spacing).
I went ahead and committed this as obvious.
Paolo
More information about the Gcc
mailing list