From def0af189871a499efdc9bc37438d8b20eb702ab Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Wed, 27 Apr 2011 23:41:48 -0400 Subject: use compiler builtins for variadic macros when available this slightly cuts down on the degree musl "fights with" gcc, but more importantly, it fixes a critical bug when gcc inlines a variadic function and optimizes out the variadic arguments due to noticing that they were "not used" (by __builtin_va_arg). we leave the old code in place if __GNUC__ >= 3 is false; it seems like it might be necessary at least for tinycc support and perhaps if anyone ever gets around to fixing gcc 2.95.3 enough to make it work.. --- include/stdarg.h | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'include') diff --git a/include/stdarg.h b/include/stdarg.h index 2e18e5f5..60d4e2af 100644 --- a/include/stdarg.h +++ b/include/stdarg.h @@ -9,7 +9,14 @@ extern "C" { #include +#if __GNUC__ >= 3 +#define va_start(v,l) __builtin_va_start(v,l) +#define va_end(v) __builtin_va_end(v) +#define va_arg(v,l) __builtin_va_arg(v,l) +#define va_copy(d,s) __builtin_va_copy(d,s) +#else #include +#endif #ifdef __cplusplus } -- cgit v1.2.1