[Bug tree-optimization/10980] vararg functions are not inlined
colomar.6.4.3 at gmail dot com
gcc-bugzilla@gcc.gnu.org
Fri Jul 5 05:53:00 GMT 2019
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=10980
Alejandro Colomar <colomar.6.4.3 at gmail dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |colomar.6.4.3 at gmail dot com
--- Comment #13 from Alejandro Colomar <colomar.6.4.3 at gmail dot com> ---
static inline void TELL(const char *fmt, ...)
__attribute__((format(printf, 1, 2), always_inline));
static inline void TELL(const char *fmt, ...)
{
va_list ap;
va_start(ap,fmt);
vsyslog(LOG_NOTICE,_(fmt),ap);
va_end(ap);
}
The compiler should be able to see that it is a varargs
function with printf-like format, and that the only reason
for `va_list` to exist is to pass the varargs and not to use
them.
It is trivial to see that an inlined version would be
simplified to a call to `syslog`.
Example:
void foo(void)
{
char *world = "world";
char newline = '\n';
TELL("Hello %s%c%c", world, '!', newline);
}
could be inlined to the following code:
void foo(void)
{
char *world = "world";
char newline = '\n';
syslog(LOG_NOTICE, "Hello %s%c%c", world, '!', newline);
}
The same should happen with `vprintf`->`printf` and all those
families of functions.
More information about the Gcc-bugs
mailing list