[PATCH] mention disabling GCC built-ins for customization
Martin Sebor
msebor@gmail.com
Wed Jun 13 20:55:00 GMT 2018
On 06/13/2018 02:35 PM, Florian Weimer wrote:
> * Martin Sebor:
>
>> @strong{Portability Note:} The ability to extend the syntax of
>> @code{printf} template strings is a GNU extension. ISO standard C has
>> -nothing similar.
>> +nothing similar. When using the GNU C compiler or any other compiler
>> +that interprets calls to standard I/O functions according to the rules
>> +of the language standard it is necessary to disable such handling by
>> +the appropriate compiler option. Otherwise the behavior of a program
>> +that relies on the extension is undefined.
>
> Aren't there ISO extensions to C which define additional format
> specifiers which GCC knows nothing about? So maybe it makes more
> sense to say that if the application uses format specifiers not known
> by GCC, behavior is undefined (unless the compiler option is used).
The GCC optimization is disabled when the format string contains
invalid or unhandled specifiers/modifiers etc, so even those may
still be undefined in Glibc they aren't a problem for GCC.
What would cause a problem for the GCC optimization is a change
to the behavior of one of the standard conversions, like %i, or
%s. One example would be changing the number of bytes output by
the conversion. Another example of a future GCC optimization
that would lead to undefined behavior is a hook that modified
the string argument to %s (when GCC starts to assume that
the argument is not clobbered by a sprintf call).
Martin
More information about the Libc-alpha
mailing list