| /* ===-------- vadefs.h ---------------------------------------------------=== |
| * |
| * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| * See https://llvm.org/LICENSE.txt for license information. |
| * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| * |
| *===-----------------------------------------------------------------------=== |
| */ |
| |
| /* Only include this if we are aiming for MSVC compatibility. */ |
| #ifndef _MSC_VER |
| #include_next <vadefs.h> |
| #else |
| |
| #ifndef __clang_vadefs_h |
| #define __clang_vadefs_h |
| |
| #include_next <vadefs.h> |
| |
| /* Override macros from vadefs.h with definitions that work with Clang. */ |
| #ifdef _crt_va_start |
| #undef _crt_va_start |
| #define _crt_va_start(ap, param) __builtin_va_start(ap, param) |
| #endif |
| #ifdef _crt_va_end |
| #undef _crt_va_end |
| #define _crt_va_end(ap) __builtin_va_end(ap) |
| #endif |
| #ifdef _crt_va_arg |
| #undef _crt_va_arg |
| #define _crt_va_arg(ap, type) __builtin_va_arg(ap, type) |
| #endif |
| |
| /* VS 2015 switched to double underscore names, which is an improvement, but now |
| * we have to intercept those names too. |
| */ |
| #ifdef __crt_va_start |
| #undef __crt_va_start |
| #define __crt_va_start(ap, param) __builtin_va_start(ap, param) |
| #endif |
| #ifdef __crt_va_end |
| #undef __crt_va_end |
| #define __crt_va_end(ap) __builtin_va_end(ap) |
| #endif |
| #ifdef __crt_va_arg |
| #undef __crt_va_arg |
| #define __crt_va_arg(ap, type) __builtin_va_arg(ap, type) |
| #endif |
| |
| #endif |
| #endif |