You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.3 KiB
52 lines
1.3 KiB
/** |
|
* @file attributes.h |
|
* |
|
* Macros for attributes on functions, variables, etc. |
|
*/ |
|
#pragma once |
|
|
|
#ifdef __has_attribute |
|
#define DVL_HAVE_ATTRIBUTE(x) __has_attribute(x) |
|
#else |
|
#define DVL_HAVE_ATTRIBUTE(x) 0 |
|
#endif |
|
|
|
#if DVL_HAVE_ATTRIBUTE(format) || (defined(__GNUC__) && !defined(__clang__)) |
|
#define DVL_PRINTF_ATTRIBUTE(fmtargnum, firstarg) \ |
|
__attribute__((__format__(__printf__, fmtargnum, firstarg))) |
|
#else |
|
#define DVL_PRINTF_ATTRIBUTE(fmtargnum, firstarg) |
|
#endif |
|
|
|
#if DVL_HAVE_ATTRIBUTE(always_inline) |
|
#define DVL_ALWAYS_INLINE inline __attribute__((always_inline)) |
|
#elif defined(_MSC_VER) |
|
#define DVL_ALWAYS_INLINE __forceinline |
|
#else |
|
#define DVL_ALWAYS_INLINE inline |
|
#endif |
|
|
|
#if DVL_HAVE_ATTRIBUTE(hot) |
|
#define DVL_ATTRIBUTE_HOT __attribute__((hot)) |
|
#else |
|
#define DVL_ATTRIBUTE_HOT |
|
#endif |
|
|
|
// Any global data used by tests must be marked with `DVL_API_FOR_TEST`. |
|
#if defined(_MSC_VER) && defined(BUILD_TESTING) |
|
#ifdef _DVL_EXPORTING |
|
#define DVL_API_FOR_TEST __declspec(dllexport) |
|
#else |
|
#define DVL_API_FOR_TEST __declspec(dllimport) |
|
#endif |
|
#else |
|
#define DVL_API_FOR_TEST |
|
#endif |
|
|
|
#if defined(__clang__) |
|
#define DVL_REINITIALIZES [[clang::reinitializes]] |
|
#elif DVL_HAVE_ATTRIBUTE(reinitializes) |
|
#define DVL_REINITIALIZES __attribute__((reinitializes)) |
|
#else |
|
#define DVL_REINITIALIZES |
|
#endif
|
|
|