| // Like the compiler, the static analyzer treats some functions differently if |
| // they come from a system header -- for example, it is assumed that system |
| // functions do not arbitrarily free() their parameters, and that some bugs |
| // found in system headers cannot be fixed by the user and should be |
| // suppressed. |
| |
| #pragma clang system_header |
| |
| #ifdef __cplusplus |
| #define restrict /*restrict*/ |
| #endif |
| |
| typedef __builtin_va_list va_list; |
| |
| #define va_start(ap, param) __builtin_va_start(ap, param) |
| #define va_end(ap) __builtin_va_end(ap) |
| #define va_arg(ap, type) __builtin_va_arg(ap, type) |
| #define va_copy(dst, src) __builtin_va_copy(dst, src) |
| |
| int vprintf (const char *restrict format, va_list arg); |
| |
| int vsprintf (char *restrict s, const char *restrict format, va_list arg); |
| |
| int some_library_function(int n, va_list arg); |
| |
| // No warning from system header. |
| inline void __impl_detail(int fst, ...) { |
| va_list va; |
| (void)va_arg(va, int); |
| } |