mirror of
git://git.musl-libc.org/musl
synced 2024-11-27 12:04:14 +08:00
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..
This commit is contained in:
parent
e6bac87d0e
commit
def0af1898
@ -19,7 +19,12 @@ union \1 \2;\
|
||||
TYPEDEF unsigned size_t;
|
||||
TYPEDEF int ssize_t;
|
||||
TYPEDEF long ptrdiff_t;
|
||||
|
||||
#if __GNUC__ >= 3
|
||||
TYPEDEF __builtin_va_list va_list;
|
||||
#else
|
||||
TYPEDEF struct __va_list * va_list;
|
||||
#endif
|
||||
|
||||
TYPEDEF long wchar_t;
|
||||
TYPEDEF long wint_t;
|
||||
|
@ -2,4 +2,3 @@
|
||||
#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)
|
||||
#define __va_copy(d,s) __builtin_va_copy(d,s)
|
||||
|
@ -9,7 +9,14 @@ extern "C" {
|
||||
|
||||
#include <bits/alltypes.h>
|
||||
|
||||
#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 <bits/stdarg.h>
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user