2602 lines
99 KiB
C++
Vendored
2602 lines
99 KiB
C++
Vendored
/* Zeta API - Z/inspection/compiler/modules/Clang.h
|
|
______ ______________ ___
|
|
|__ / | ___|___ ___|/ \
|
|
/ /__| __| | | / - \
|
|
/______|_____| |__| /__/ \__\
|
|
Copyright (C) 2006-2025 Manuel Sainz de Baranda y Goñi.
|
|
Released under the terms of the GNU Lesser General Public License v3.
|
|
|
|
.------------------------------------------------------------------------------.
|
|
| Compiler: Clang |
|
|
| Last version: v10.0 |
|
|
| Language support: C89 - C17, C++98 - C++17 |
|
|
| Options: -pedantic -Wall -Wextra |
|
|
|------------------------------------------------------------------------------|
|
|
| |
|
|
| 2. VERSION NOTATION |
|
|
| ------------------- |
|
|
| |
|
|
| N -> Release Notes |
|
|
| S -> C++ Status |
|
|
| T -> Tested |
|
|
| Tw -> Tested and generate warnings |
|
|
| T! -> Tested and doesn't generate warnings |
|
|
| |
|
|
| 3. COMMONLY USED PREDEFINED MACROS |
|
|
| ---------------------------------- |
|
|
| |
|
|
| Macro | Value | Since | Meaning |
|
|
| ---------------------------+---------+-------+------------------------------ |
|
|
| __STDC_VERSION__ | 199409L | v2.6 | C95 |
|
|
| __STDC_VERSION__ | 199901L | v2.6 | C99 |
|
|
| __STDC_VERSION__ | 201112L | v3.1 | C11 |
|
|
| __STDC_VERSION__ | 201710L | v6.0 | C17 |
|
|
| __STRICT_ANSI__ | 1 | v2.6 | |
|
|
| __GXX_EXPERIMENTAL_CXX0X__ | 1 | v2.6 | C++11 (experimental) |
|
|
| __cplusplus | 1 | | GNU++11 |
|
|
| __cplusplus | 199711L | v2.6 | C++98/C++03 |
|
|
| __cplusplus | 201103L | v3.0 | C++11 |
|
|
| __cplusplus | 201305L | v3.3 | C++14 (experimental) |
|
|
| __cplusplus | 201402L | v3.5 | C++14 |
|
|
| __cplusplus | 201406L | v3.5 | C++17 (experimental) |
|
|
| __cplusplus | 201703L | v5.0 | C++17 |
|
|
| __cplusplus | 201707L | v5.0 | C++20 (experimental) |
|
|
| __cplusplus | 202002L | v10.0 | C++20 |
|
|
| |
|
|
|
|
|
| -std=gnu++11 causes __cplusplus be predefined as 1 instead of 201103L in versions
|
|
| prior to v3.2.
|
|
|
|
|
| C++11 feature test macros not used (for now):
|
|
| __has_feature(cxx_access_control_sfinae)
|
|
| __has_feature(cxx_implicit_moves)
|
|
'=============================================================================*/
|
|
|
|
#ifndef Z_inspection_compiler_modules_Clang_H
|
|
#define Z_inspection_compiler_modules_Clang_H
|
|
|
|
/* MARK: - Identification */
|
|
|
|
#define Z_COMPILER_IS_CLANG 1
|
|
#define Z_COMPILER_NAME Z_COMPILER_NAME_CLANG
|
|
|
|
#if defined(__clang_version__) /* v2.8 */
|
|
# define Z_COMPILER_VERSION Z_VERSION(__clang_major__, __clang_minor__, __clang_patchlevel__)
|
|
# define Z_COMPILER_VERSION_STRING __clang_version__
|
|
|
|
#elif defined(__SIZE_WIDTH__) /* v2.7 */
|
|
# define Z_COMPILER_VERSION Z_VERSION(2,7,0)
|
|
# define Z_COMPILER_VERSION_STRING "2.7"
|
|
|
|
#else
|
|
# define Z_COMPILER_VERSION Z_VERSION(2,6,0)
|
|
# define Z_COMPILER_VERSION_STRING "2.6"
|
|
#endif
|
|
|
|
/* MARK: - Private macros */
|
|
|
|
#ifdef __has_attribute /* v2.9 */
|
|
# define Z_z_HAS_ATTRIBUTE __has_attribute
|
|
#else
|
|
# define Z_z_HAS_ATTRIBUTE(which) 0
|
|
#endif
|
|
|
|
#ifdef __has_cpp_attribute /* v3.6 */
|
|
# define Z_z_HAS_CPP_ATTRIBUTE __has_cpp_attribute
|
|
#else
|
|
# define Z_z_HAS_CPP_ATTRIBUTE(which) 0
|
|
#endif
|
|
|
|
#ifdef __has_extension /* v3.0 */
|
|
# define Z_z_HAS_EXTENSION __has_extension
|
|
#else
|
|
# define Z_z_HAS_EXTENSION __has_feature
|
|
#endif
|
|
|
|
/*---------------------------------------------------------------------------.
|
|
| IMPORTANT: There is no well-defined way to know if the MSVC compatibility |
|
|
| mode is enabled. The following method is based on certain macros that are |
|
|
| known to be predefined or not when this mode is used. This could change in |
|
|
| future versions of Clang... |
|
|
'===========================================================================*/
|
|
#if (Z_COMPILER_VERSION >= Z_VERSION(3,1,0) && !defined(__GNUC__ )) || \
|
|
(Z_COMPILER_VERSION == Z_VERSION(3,0,0) && defined(__PRETTY_FUNCTION__)) || \
|
|
(Z_COMPILER_VERSION < Z_VERSION(3,0,0) && !defined(__STDC__ ))
|
|
|
|
# define Z_z_HAS_MSVC_COMPATIBILITY 1
|
|
#else
|
|
# define Z_z_HAS_MSVC_COMPATIBILITY 0
|
|
#endif
|
|
|
|
/*-------------------------------------------------------------------------.
|
|
| IMPORTANT: Since v3.5, there is no way to know if the GNU extensions are |
|
|
| enabled when using the MSVC compatibility mode. However, this may not be |
|
|
| a serious problem, as ideally both things should be mutually exclusive. |
|
|
'=========================================================================*/
|
|
#if !defined(__STRICT_ANSI__) && \
|
|
((Z_COMPILER_VERSION < Z_VERSION(3,5,0)) || \
|
|
(Z_COMPILER_VERSION >= Z_VERSION(3,5,0) && !Z_z_HAS_MSVC_COMPATIBILITY))
|
|
|
|
# define Z_z_HAS_GNU_EXTENSIONS 1
|
|
#else
|
|
# define Z_z_HAS_GNU_EXTENSIONS 0
|
|
#endif
|
|
|
|
#if Z_COMPILER_VERSION >= Z_VERSION(10,0,0)
|
|
# define Z_z_HAS_TRAIT(which) \
|
|
(__has_builtin(__##which) || !__is_identifier(__##which) || __has_extension(which))
|
|
|
|
#elif Z_COMPILER_VERSION >= Z_VERSION(6,0,0)
|
|
# define Z_z_HAS_TRAIT(which) \
|
|
(!__is_identifier(__##which) || __has_extension(which))
|
|
|
|
#else
|
|
# define Z_z_HAS_TRAIT Z_z_HAS_EXTENSION
|
|
#endif
|
|
|
|
/* MARK: - ISA / Bit field order */
|
|
|
|
#if defined(__amd64 ) /* v2.6 */ || \
|
|
defined(__amd64__ ) /* v2.6 */ || \
|
|
defined(__x86_64 ) /* v2.6 */ || \
|
|
defined(__x86_64__) /* v2.6 */ || \
|
|
defined(_M_AMD64 ) /* v2.9 */ || \
|
|
defined(_M_X64 ) /* v2.7 */
|
|
|
|
# define Z_COMPILER_ISA Z_ISA_X86_64
|
|
|
|
#elif defined(__INTEL__) /* v2.8 */ || \
|
|
defined(__i386 ) /* v2.6 */ || \
|
|
defined(__i386__ ) /* v2.6 */ || \
|
|
defined(__i486 ) /* v3.0 */ || \
|
|
defined(__i486__ ) /* v3.0 */ || \
|
|
defined(__i586 ) /* v3.0 */ || \
|
|
defined(__i586__ ) /* v3.0 */ || \
|
|
defined(__i686 ) /* v3.0 */ || \
|
|
defined(__i686__ ) /* v3.0 */ || \
|
|
defined(_M_IX86 ) /* v2.7 */ || \
|
|
defined(_X86_ ) /* v2.6 */ || \
|
|
defined(i386 ) /* v2.6 */
|
|
|
|
# define Z_COMPILER_ISA Z_ISA_X86_32
|
|
|
|
#elif defined(__ARM_ARCH_ISA_A64) /* v3.4 */ || \
|
|
defined(__aarch64__ ) /* v3.3 */ || \
|
|
defined(__arm64 ) /* v3.5 */ || \
|
|
defined(__arm64__ ) /* v3.5 */ || \
|
|
defined(_M_ARM64 ) /* v5.0 */
|
|
|
|
# define Z_COMPILER_ISA Z_ISA_AARCH64
|
|
|
|
#elif defined(__ARM_ARCH) /* v3.2 */ || \
|
|
defined(__arm ) /* v2.6 */ || \
|
|
defined(__arm__ ) /* v2.6 */ || \
|
|
defined(__thumb__ ) /* v2.7 */ || \
|
|
defined(_ARM_ ) /* v3.8 */ || \
|
|
defined(_M_ARM ) /* v3.5 */ || \
|
|
defined(_M_ARM_NT ) /* v3.5 */ || \
|
|
defined(_M_ARMT ) /* v3.5 */ || \
|
|
defined(_M_THUMB ) /* v3.5 */
|
|
|
|
# define Z_COMPILER_ISA Z_ISA_AARCH32
|
|
|
|
#elif defined(__arc__) /* v8.0 */
|
|
# define Z_COMPILER_ISA Z_ISA_ARC
|
|
|
|
#elif defined(__HEXAGON_ARCH__) /* v3.1 */ || \
|
|
defined(__QDSP6_ARCH__ ) /* v3.1 */ || \
|
|
defined(__hexagon ) /* v3.1 */ || \
|
|
defined(__hexagon__ ) /* v3.1 */ || \
|
|
defined(__qdsp6 ) /* v3.1 */ || \
|
|
defined(__qdsp6__ ) /* v3.1 */ || \
|
|
defined(hexagon ) /* v3.1 */ || \
|
|
defined(qdsp6 ) /* v3.1 */
|
|
|
|
# define Z_COMPILER_ISA Z_ISA_HEXAGON
|
|
|
|
#elif defined(__ADSPBLACKFIN__ ) /* v2.6 */ || \
|
|
defined(__ADSPLPBLACKFIN__) /* v2.6 */ || \
|
|
defined(__BFIN ) /* v2.6 */ || \
|
|
defined(__BFIN__ ) /* v2.6 */ || \
|
|
defined(__bfin ) /* v2.6 */ || \
|
|
defined(__bfin__ ) /* v2.6 */ || \
|
|
defined(BFIN ) /* v2.6 */ || \
|
|
defined(bfin ) /* v2.6 */
|
|
|
|
# define Z_COMPILER_ISA Z_ISA_BLACKFIN
|
|
|
|
#elif defined(__loongarch64) /* v16.0 */
|
|
# define Z_COMPILER_ISA Z_ISA_LA64
|
|
|
|
#elif defined(__loongarch__) /* v16.0 */
|
|
# define Z_COMPILER_ISA Z_ISA_LA32S
|
|
|
|
#elif defined(__lanai__) /* v3.9 */
|
|
# define Z_COMPILER_ISA Z_ISA_LANAI
|
|
|
|
#elif defined(__mips64 ) /* v3.2 */ || \
|
|
defined(__mips64__) /* v3.2 */ || \
|
|
(defined(__mips) && __mips == 64) /* v3.5 */ || \
|
|
(defined(_MIPS_ISA) && defined(_MIPS_ISA_MIPS64) && _MIPS_ISA == _MIPS_ISA_MIPS64) /* v3.5 */
|
|
|
|
# define Z_COMPILER_ISA Z_ISA_MIPS64
|
|
|
|
#elif defined(__mips ) /* v2.7 */ || \
|
|
defined(__mips__) /* v2.7 */ || \
|
|
defined(_mips ) /* v2.7 */ || \
|
|
defined(mips ) /* v2.7 */
|
|
|
|
# define Z_COMPILER_ISA Z_ISA_MIPS
|
|
|
|
#elif defined(__MSP430__) /* v2.6 */ || \
|
|
defined(MSP430 ) /* v2.6 */
|
|
|
|
# define Z_COMPILER_ISA Z_ISA_MSP430
|
|
|
|
#elif defined(__PPC64__ ) /* v3.4 */ || \
|
|
defined(__powerpc64__) /* v2.7 */ || \
|
|
defined(__ppc64__ ) /* v2.6 */ || \
|
|
defined(_ARCH_PPC64 ) /* v2.6 */
|
|
|
|
# define Z_COMPILER_ISA Z_ISA_POWERPC_64BIT
|
|
|
|
#elif defined(__POWERPC__) /* v2.6 */ || \
|
|
defined(__PPC__ ) /* v2.8 */ || \
|
|
defined(__powerpc__) /* v2.7 */ || \
|
|
defined(__ppc__ ) /* v2.6 */ || \
|
|
defined(_ARCH_PPC ) /* v2.6 */
|
|
|
|
# define Z_COMPILER_ISA Z_ISA_POWERPC_32BIT
|
|
|
|
#elif defined(__riscv_xlen) /* v7.0 */
|
|
# if __riscv_xlen == 64 /* v7.0 */
|
|
# define Z_COMPILER_ISA Z_ISA_RV64I
|
|
|
|
# elif __riscv_xlen == 32 /* v7.0 */
|
|
# define Z_COMPILER_ISA Z_ISA_RV32I
|
|
# endif
|
|
|
|
#elif defined(__arch64__ ) /* v3.3 */ || \
|
|
defined(__sparc_v9__) /* v3.3 */ || \
|
|
defined(__sparc64__ ) /* v3.3 */ || \
|
|
defined(__sparcv9 ) /* v3.3 */ || \
|
|
defined(__sparcv9__ ) /* v3.3 */
|
|
|
|
# define Z_COMPILER_ISA Z_ISA_SPARC_V9
|
|
|
|
#elif defined(__sparc ) /* v2.6 */ || \
|
|
defined(__sparc__ ) /* v2.6 */ || \
|
|
defined(__sparcv8 ) /* v2.6 */ || \
|
|
defined(__sparcv8__) /* v3.8 */ || \
|
|
defined(sparc ) /* v2.6 */
|
|
|
|
# define Z_COMPILER_ISA Z_ISA_SPARC
|
|
|
|
#elif defined(__wasm64 ) || \
|
|
defined(__wasm64__)
|
|
|
|
# define Z_COMPILER_ISA Z_ISA_WASM64
|
|
|
|
#elif defined(__wasm ) || \
|
|
defined(__wasm__ ) || \
|
|
defined(__wasm32 ) || \
|
|
defined(__wasm32__)
|
|
|
|
# define Z_COMPILER_ISA Z_ISA_WASM32
|
|
|
|
#elif defined(__XS1B__) /* v3.4 */
|
|
# define Z_COMPILER_ISA Z_ISA_XCORE
|
|
|
|
#elif defined(__s390__ ) /* v2.6 */ || \
|
|
defined(__s390x__) /* v2.6 */ || \
|
|
defined(__zarch__) /* v3.3 */
|
|
|
|
# define Z_COMPILER_ISA Z_ISA_Z_ARCHITECTURE
|
|
#endif
|
|
|
|
#ifdef __BYTE_ORDER__ /* v3.2 */
|
|
# if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ /* v3.2 */
|
|
# define Z_COMPILER_ISA_INTEGRAL_ENDIANNESS Z_ENDIANNESS_LITTLE
|
|
# define Z_COMPILER_BIT_FIELD_ORDER_ALL Z_ORDER_REVERSED
|
|
|
|
# elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ /* v3.2 */
|
|
# define Z_COMPILER_ISA_INTEGRAL_ENDIANNESS Z_ENDIANNESS_BIG
|
|
# define Z_COMPILER_BIT_FIELD_ORDER_ALL Z_ORDER_NORMAL
|
|
# endif
|
|
|
|
#elif defined(__AARCH64EL__ ) /* v3.3 */ || \
|
|
defined(__ARMEL__ ) /* v2.6 */ || \
|
|
defined(__ENDIAN_LITTLE__) /* v4.0 */ || \
|
|
defined(__LITTLE_ENDIAN__) /* v2.6 */ || \
|
|
defined(__MIPSEL ) /* v2.7 */ || \
|
|
defined(__MIPSEL__ ) /* v2.7 */ || \
|
|
defined(__THUMBEL__ ) /* v2.7 */ || \
|
|
defined(_LITTLE_ENDIAN ) /* v3.4 */ || \
|
|
defined(_MIPSEL ) /* v2.7 */ || \
|
|
defined(MIPSEL ) /* v2.7 */
|
|
|
|
# define Z_COMPILER_ISA_INTEGRAL_ENDIANNESS Z_ENDIANNESS_LITTLE
|
|
# define Z_COMPILER_BIT_FIELD_ORDER_ALL Z_ORDER_REVERSED
|
|
|
|
#elif defined(__AARCH_BIG_ENDIAN) /* v3.4 */ || \
|
|
defined(__AARCH64EB__ ) /* v3.5 */ || \
|
|
defined(__ARM_BIG_ENDIAN ) /* v3.3 */ || \
|
|
defined(__ARMEB__ ) /* v3.5 */ || \
|
|
defined(__BIG_ENDIAN__ ) /* v2.6 */ || \
|
|
defined(__MIPSEB ) /* v2.7 */ || \
|
|
defined(__MIPSEB__ ) /* v2.7 */ || \
|
|
defined(_BIG_ENDIAN ) /* v2.6 */ || \
|
|
defined(_MIPSEB ) /* v2.7 */ || \
|
|
defined(MIPSEB ) /* v2.7 */
|
|
|
|
# define Z_COMPILER_ISA_INTEGRAL_ENDIANNESS Z_ENDIANNESS_BIG
|
|
# define Z_COMPILER_BIT_FIELD_ORDER_ALL Z_ORDER_NORMAL
|
|
|
|
#else
|
|
# error "Clang driver: Cannot detect the endianness of integral types."
|
|
#endif
|
|
|
|
/*#define Z_COMPILER_BIT_FIELD_ORDER_8BIT*/
|
|
/*#define Z_COMPILER_BIT_FIELD_ORDER_16BIT*/
|
|
/*#define Z_COMPILER_BIT_FIELD_ORDER_32BIT*/
|
|
/*#define Z_COMPILER_BIT_FIELD_ORDER_64BIT*/
|
|
/*#define Z_COMPILER_BIT_FIELD_ORDER_128BIT*/
|
|
|
|
/* MARK: - Platform / OS */
|
|
|
|
#if defined(__ANDROID__) /* v3.2 */
|
|
# define Z_COMPILER_OS Z_OS_ANDROID
|
|
|
|
#elif defined(__gnu_linux__) /* v2.6 */ || \
|
|
defined(__linux ) /* v2.6 */ || \
|
|
defined(__linux__ ) /* v2.6 */ || \
|
|
defined(linux ) /* v2.6 */
|
|
|
|
# define Z_COMPILER_OS Z_OS_LINUX
|
|
|
|
#elif defined(__APPLE_CC__) /* v2.6 */ || \
|
|
(defined(__APPLE__ ) /* v2.6 */ && \
|
|
defined(__MACH__ )) /* v2.6 */
|
|
|
|
# if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) /* v2.6 */
|
|
# define Z_COMPILER_OS Z_OS_MAC_OS_X
|
|
|
|
# elif defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) /* v2.6 */
|
|
# define Z_COMPILER_OS Z_OS_IOS
|
|
|
|
# elif defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) /* v3.8 */
|
|
# define Z_COMPILER_OS Z_OS_TVOS
|
|
|
|
# elif defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) /* v3.8 */
|
|
# define Z_COMPILER_OS Z_OS_WATCHOS
|
|
# endif
|
|
|
|
#elif defined(__WIN32 ) /* v2.6 */ || \
|
|
defined(__WIN32__) /* v2.6 */ || \
|
|
defined(__WIN64 ) /* v2.7 */ || \
|
|
defined(__WIN64__) /* v2.7 */ || \
|
|
defined(__WINNT ) /* v2.6 */ || \
|
|
defined(__WINNT__) /* v2.6 */ || \
|
|
defined(_WIN32 ) /* v2.6 */ || \
|
|
defined(_WIN64 ) /* v2.7 */ || \
|
|
defined(WIN32 ) /* v2.6 */ || \
|
|
defined(WIN64 ) /* v2.7 */ || \
|
|
defined(WINNT ) /* v2.6 */
|
|
|
|
# define Z_COMPILER_OS Z_OS_WINDOWS
|
|
|
|
#elif defined(_AIX) /* v9.0 */
|
|
# define Z_COMPILER_OS Z_OS_AIX
|
|
|
|
#elif defined(__Ananas__) /* v5.0 */
|
|
# define Z_COMPILER_OS Z_OS_ANANAS_OS
|
|
|
|
#elif defined(__Bitrig__) /* v3.2 */
|
|
# define Z_COMPILER_OS Z_OS_BITRIG
|
|
|
|
#elif defined(__CELLOS_LV2__) /* v2.7 (Revisar, puede que sólo para la PPU) */
|
|
# define Z_COMPILER_PLATFORM Z_PLATFORM_PS3
|
|
# define Z_COMPILER_OS Z_OS_CELL_OS
|
|
|
|
#elif defined(__CYGWIN__ ) /* v2.7 */ || \
|
|
defined(__CYGWIN32__) /* v2.7 */ || \
|
|
defined(__CYGWIN64__) /* v3.8 */
|
|
|
|
# define Z_COMPILER_OS Z_OS_CYGWIN
|
|
|
|
#elif defined(__DragonFly__) /* v2.6 */
|
|
# define Z_COMPILER_OS Z_OS_DRAGONFLY_BSD
|
|
|
|
#elif defined(__FreeBSD__ ) /* v2.6 */ || \
|
|
defined(__FreeBSD_kernel__) /* v3.4 */
|
|
|
|
# define Z_COMPILER_OS Z_OS_FREE_BSD
|
|
|
|
#elif defined(__Fuchsia__) /* v4.0 */
|
|
# define Z_COMPILER_OS Z_OS_FUCHSIA
|
|
|
|
#elif defined(__HAIKU__) /* v2.8 */
|
|
# define Z_COMPILER_OS Z_OS_HAIKU
|
|
|
|
#elif defined(__gnu_hurd__) /* v8.0 */
|
|
# define Z_COMPILER_OS Z_OS_GNU_HURD
|
|
|
|
#elif defined(__minix) /* v2.8 */
|
|
# define Z_COMPILER_OS Z_OS_MINIX
|
|
|
|
#elif defined(__NetBSD__) /* v2.6 */
|
|
# define Z_COMPILER_OS Z_OS_NET_BSD
|
|
|
|
#elif defined(__OpenBSD__) /* v2.6 */
|
|
# define Z_COMPILER_OS Z_OS_OPEN_BSD
|
|
|
|
#elif defined(__ORBIS__) /* v3.9 */
|
|
# define Z_COMPILER_PLATFORM Z_PLATFORM_PS4
|
|
# define Z_COMPILER_OS Z_OS_ORBIS_OS
|
|
|
|
#elif defined(__psp__) /* v2.7 */ || \
|
|
defined(_PSP ) /* v2.7 */ || \
|
|
defined(PSP ) /* v2.7 */
|
|
|
|
# define Z_COMPILER_PLATFORM Z_PLATFORM_PSP
|
|
# define Z_COMPILER_OS Z_OS_PSP_SYSTEM_SOFTWARE
|
|
|
|
#elif defined(__rtems__) /* v3.0 */
|
|
# define Z_COMPILER_OS Z_OS_RTEMS
|
|
|
|
#elif defined(__SVR4 ) /* v2.6 */ || \
|
|
defined(__sun ) /* v2.6 */ || \
|
|
defined(__sun__ ) /* v2.6 */ || \
|
|
defined(__svr4__) /* v2.6 */ || \
|
|
defined(sun ) /* v2.6 */
|
|
|
|
# define Z_COMPILER_OS Z_OS_SOLARIS
|
|
|
|
/* TODO: z-OS */
|
|
|
|
#endif
|
|
|
|
/* MARK: - Data model */
|
|
|
|
#if defined(__ILP32__) /* v3.5 */ || \
|
|
defined(_ILP32 ) /* v3.5 */ || \
|
|
defined(_WIN32 ) /* v2.6 */
|
|
|
|
# define Z_COMPILER_DATA_MODEL Z_DATA_MODEL_ILP32
|
|
|
|
#elif defined(_WIN64) /* v2.7 */
|
|
# define Z_COMPILER_DATA_MODEL Z_DATA_MODEL_LLP64
|
|
|
|
#elif defined(__LP32__) /* v2.7 */
|
|
# define Z_COMPILER_DATA_MODEL Z_DATA_MODEL_LP32
|
|
|
|
#elif defined(__LP64__) /* v2.6 */ || \
|
|
defined(_LP64 ) /* v2.6 */
|
|
|
|
# define Z_COMPILER_DATA_MODEL Z_DATA_MODEL_LP64
|
|
#endif
|
|
|
|
/* MARK: - Floating-point */
|
|
|
|
#ifdef __FLT_MANT_DIG__ /* v2.6 */
|
|
# if __FLT_MANT_DIG__ == 11
|
|
# define Z_COMPILER_FIXED_FUNDAMENTAL_FLOAT Z_FUNDAMENTAL_BFP16
|
|
|
|
# elif __FLT_MANT_DIG__ == 24
|
|
# define Z_COMPILER_FIXED_FUNDAMENTAL_FLOAT Z_FUNDAMENTAL_BFP32
|
|
|
|
# elif __FLT_MANT_DIG__ == 53
|
|
# define Z_COMPILER_FIXED_FUNDAMENTAL_FLOAT Z_FUNDAMENTAL_BFP64
|
|
|
|
# elif
|
|
# error "Clang driver: Can not detect the format of the `float` type."
|
|
# endif
|
|
#endif
|
|
|
|
#ifdef __DBL_MANT_DIG__ /* v2.6 */
|
|
# if __DBL_MANT_DIG__ == 11
|
|
# define Z_COMPILER_FIXED_FUNDAMENTAL_DOUBLE Z_FUNDAMENTAL_BFP16
|
|
|
|
# elif __DBL_MANT_DIG__ == 24
|
|
# define Z_COMPILER_FIXED_FUNDAMENTAL_DOUBLE Z_FUNDAMENTAL_BFP32
|
|
|
|
# elif __DBL_MANT_DIG__ == 53
|
|
# define Z_COMPILER_FIXED_FUNDAMENTAL_DOUBLE Z_FUNDAMENTAL_BFP64
|
|
|
|
# else
|
|
# error "Clang driver: Cannot detect the format of the `double` type."
|
|
# endif
|
|
#endif
|
|
|
|
#ifdef __LDBL_MANT_DIG__ /* v2.6 */
|
|
# if __LDBL_MANT_DIG__ == 11
|
|
# define Z_COMPILER_FIXED_FUNDAMENTAL_LDOUBLE Z_FUNDAMENTAL_BFP16
|
|
|
|
# elif __LDBL_MANT_DIG__ == 24
|
|
# define Z_COMPILER_FIXED_FUNDAMENTAL_LDOUBLE Z_FUNDAMENTAL_BFP32
|
|
|
|
# elif __LDBL_MANT_DIG__ == 53
|
|
# define Z_COMPILER_FIXED_FUNDAMENTAL_LDOUBLE Z_FUNDAMENTAL_BFP64
|
|
|
|
# elif __LDBL_MANT_DIG__ == 64
|
|
# ifdef __SIZEOF_LONG_DOUBLE__ /* v2.8 */
|
|
# if __SIZEOF_LONG_DOUBLE__ == 12
|
|
# define Z_COMPILER_FIXED_FUNDAMENTAL_LDOUBLE Z_FUNDAMENTAL_X87_DE96
|
|
|
|
# elif __SIZEOF_LONG_DOUBLE__ == 16
|
|
# define Z_COMPILER_FIXED_FUNDAMENTAL_LDOUBLE Z_FUNDAMENTAL_X87_DE128
|
|
# endif
|
|
|
|
# elif Z_COMPILER_VERSION < Z_VERSION(2,8,0)
|
|
# include <Z/keys/ISA.h>
|
|
# include <Z/keys/OS.h>
|
|
|
|
# if (defined(Z_COMPILER_ISA) && Z_COMPILER_ISA == Z_ISA_X86_64 ) || \
|
|
(defined(Z_COMPILER_OS ) && Z_COMPILER_OS == Z_OS_MAC_OS_X)
|
|
|
|
# define Z_COMPILER_FIXED_FUNDAMENTAL_LDOUBLE Z_FUNDAMENTAL_X87_DE128
|
|
|
|
# elif defined(Z_COMPILER_ISA) && Z_COMPILER_ISA == Z_ISA_X86_32
|
|
# define Z_COMPILER_FIXED_FUNDAMENTAL_LDOUBLE Z_FUNDAMENTAL_X87_DE96
|
|
# else
|
|
# error "Clang driver: Cannot detect the format of the `long double` type."
|
|
# endif
|
|
# endif
|
|
|
|
# elif __LDBL_MANT_DIG__ == 106
|
|
# define Z_COMPILER_FIXED_FUNDAMENTAL_LDOUBLE Z_FUNDAMENTAL_IBM_ED
|
|
|
|
# elif __LDBL_MANT_DIG__ == 113
|
|
# define Z_COMPILER_FIXED_FUNDAMENTAL_LDOUBLE Z_FUNDAMENTAL_BFP128
|
|
|
|
# else
|
|
# error "Clang driver: Cannot detect the format of the `long double` type."
|
|
# endif
|
|
#endif
|
|
|
|
/*#define Z_COMPILER_FIXED_FUNDAMENTAL_FLOAT32X*/
|
|
/*#define Z_COMPILER_FIXED_FUNDAMENTAL_FLOAT64X*/
|
|
/*#define Z_COMPILER_FIXED_FUNDAMENTAL_FLOAT128X*/
|
|
/*#define Z_COMPILER_FIXED_FUNDAMENTAL_DECIMAL64X*/
|
|
/*#define Z_COMPILER_FIXED_FUNDAMENTAL_DECIMAL128X*/
|
|
|
|
/* MARK: - Language: C78 */
|
|
|
|
#define Z_COMPILER_HAS_C_OLD_STYLE_FUNCTION 1 /* v2.6 */
|
|
#define Z_COMPILER_HAS_C_OPERATOR_SIZEOF 1 /* v2.6 */
|
|
#define Z_COMPILER_HAS_C_STORAGE_CLASS_EXTERN 1 /* v2.6 */
|
|
#define Z_COMPILER_HAS_C_STORAGE_CLASS_STATIC 1 /* v2.6 */
|
|
|
|
#if __has_feature(cxx_auto_type) /* v2.7 */
|
|
# define Z_COMPILER_HAS_C_STORAGE_CLASS_AUTO 1 /* v2.6 */
|
|
#endif
|
|
|
|
#if !defined(__cplusplus) || __cplusplus < 201103L || \
|
|
Z_COMPILER_VERSION < Z_VERSION(3,4,0)
|
|
|
|
# define Z_COMPILER_HAS_C_STORAGE_CLASS_REGISTER 1 /* v2.6 */
|
|
#endif
|
|
|
|
#ifdef __DBL_MAX__ /* v2.6 */
|
|
# define Z_COMPILER_HAS_C_TYPE_DOUBLE 1 /* v2.6 */
|
|
#endif
|
|
|
|
#ifdef __FLT_MAX__ /* v2.6 */
|
|
# define Z_COMPILER_HAS_C_TYPE_FLOAT 1 /* v2.6 */
|
|
#endif
|
|
|
|
/* MARK: - Language: C89 */
|
|
|
|
#define Z_COMPILER_HAS_C89_CONSTANT_INITIALIZATION_FOR_LOCAL_AGGREGATE 1 /* v2.6 */
|
|
#define Z_COMPILER_HAS_C89_CONSTANT_INITIALIZATION_FOR_UNION 1 /* v2.6 */
|
|
#define Z_COMPILER_HAS_C89_CONSTRUCT_AS_FUNCTION_ARGUMENT 1 /* v2.6 */
|
|
#define Z_COMPILER_HAS_C89_CONSTRUCT_RETURN 1 /* v2.6 */
|
|
#define Z_COMPILER_HAS_C89_CONSTRUCT_ASSIGNMENT 1 /* v2.6 */
|
|
#define Z_COMPILER_HAS_C89_CONSTRUCT_NAMESPACE 1 /* v2.6 */
|
|
#define Z_COMPILER_HAS_C89_ENUMERATION 1 /* v2.6 */
|
|
#define Z_COMPILER_HAS_C89_FUNCTION_POINTER_AUTODEREFERENCING 1 /* v2.6 */
|
|
#define Z_COMPILER_HAS_C89_FUNCTION_PROTOTYPE 1 /* v2.6 */
|
|
#define Z_COMPILER_HAS_C89_INTEGRAL_SWITCH 1 /* v2.6 */
|
|
#define Z_COMPILER_HAS_C89_PREPROCESSOR_INDENTATION 1 /* v2.6 */
|
|
#define Z_COMPILER_HAS_C89_REMOVAL_OF_ENTRY_AS_KEYWORD 1 /* v2.6 */
|
|
#define Z_COMPILER_HAS_C89_REMOVAL_OF_LONG_FLOAT_AS_TYPE 1 /* v2.6 */
|
|
#define Z_COMPILER_HAS_C89_STRING_LITERAL_CONCATENATION 1 /* v2.6 */
|
|
#define Z_COMPILER_HAS_C89_VALUE_PRESERVING_UNSIGNED_CONVERSION 1 /* v2.6 */
|
|
#define Z_COMPILER_HAS_C89_ESCAPE_SEQUENCE_ALERT 1 /* v2.6 */
|
|
#define Z_COMPILER_HAS_C89_ESCAPE_SEQUENCE_HEXADECIMAL 1 /* v2.6 */
|
|
#define Z_COMPILER_HAS_C89_ESCAPE_SEQUENCE_VERTICAL_TAB 1 /* v2.6 */
|
|
#define Z_COMPILER_HAS_C89_LITERAL_UNSIGNED 1 /* v2.6 */
|
|
#define Z_COMPILER_HAS_C89_LITERAL_WCHAR_T_CHARACTER 1 /* v2.6 */
|
|
#define Z_COMPILER_HAS_C89_LITERAL_WCHAR_T_STRING 1 /* v2.6 */
|
|
#define Z_COMPILER_HAS_C89_OPERATOR_UNARY_PLUS 1 /* v2.6 */
|
|
#define Z_COMPILER_HAS_C89_PREPROCESSOR_DIRECTIVE_NULL 1 /* v2.6 */
|
|
#define Z_COMPILER_HAS_C89_PREPROCESSOR_DIRECTIVE_ELIF 1 /* v2.6 */
|
|
#define Z_COMPILER_HAS_C89_PREPROCESSOR_DIRECTIVE_ERROR 1 /* v2.6 */
|
|
#define Z_COMPILER_HAS_C89_PREPROCESSOR_DIRECTIVE_LINE 1 /* v2.6 */
|
|
#define Z_COMPILER_HAS_C89_PREPROCESSOR_DIRECTIVE_PRAGMA 1 /* v2.6 */
|
|
#define Z_COMPILER_HAS_C89_PREPROCESSOR_OPERATOR_DEFINED 1 /* v2.6 */
|
|
#define Z_COMPILER_HAS_C89_PREPROCESSOR_OPERATOR_PASTING 1 /* v2.6 */
|
|
#define Z_COMPILER_HAS_C89_PREPROCESSOR_OPERATOR_STRINGIZING 1 /* v2.6 */
|
|
#define Z_COMPILER_HAS_C89_TYPE_UNSIGNED_CHAR 1 /* v2.6 */
|
|
#define Z_COMPILER_HAS_C89_TYPE_UNSIGNED_LONG 1 /* v2.6 */
|
|
#define Z_COMPILER_HAS_C89_TYPE_UNSIGNED_SHORT 1 /* v2.6 */
|
|
#define Z_COMPILER_HAS_C89_TYPE_VOID 1 /* v2.6 */
|
|
#define Z_COMPILER_HAS_C89_TYPE_VOID_POINTER 1 /* v2.6 */
|
|
#define Z_COMPILER_HAS_C89_TYPE_MODIFIER_SIGNED 1 /* v2.6 */
|
|
#define Z_COMPILER_HAS_C89_TYPE_QUALIFIER_CONST 1 /* v2.6 */
|
|
#define Z_COMPILER_HAS_C89_TYPE_QUALIFIER_VOLATILE 1 /* v2.6 */
|
|
|
|
#ifdef __FLT_MAX__ /* v2.6 */
|
|
# define Z_COMPILER_HAS_C89_LITERAL_FLOAT 1 /* v2.6 */
|
|
#endif
|
|
|
|
#ifdef __LDBL_MAX__ /* v2.6 */
|
|
# define Z_COMPILER_HAS_C89_TYPE_LONG_DOUBLE 1 /* v2.6 */
|
|
#endif
|
|
|
|
/*#define Z_COMPILER_HAS_C89_TRIGRAPHS*/ /* Always generate warnings/errors. */
|
|
|
|
/* MARK: - Language: C95 */
|
|
|
|
#if defined(__cplusplus) || \
|
|
Z_z_HAS_GNU_EXTENSIONS || \
|
|
(defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199409L)
|
|
|
|
# define Z_COMPILER_HAS_C95_DIGRAPHS 1 /* v2.6 */
|
|
#endif
|
|
|
|
/* MARK: - Language: C99 */
|
|
|
|
#define Z_COMPILER_HAS_C99_PREPROCESSOR_ARITHMETIC_DONE_IN_INTMAX 1 /* v2.6? */
|
|
#define Z_COMPILER_HAS_C99_RELIABLE_INTEGER_DIVISION 1 /* v2.6 */
|
|
#define Z_COMPILER_HAS_C99_REMOVAL_OF_ILL_FORMED_RETURN 1 /* v2.6 */
|
|
#define Z_COMPILER_HAS_C99_REMOVAL_OF_IMPLICIT_FUNCTION_DECLARATION 1 /* v2.6 */
|
|
#define Z_COMPILER_HAS_C99_REMOVAL_OF_IMPLICIT_INT 1 /* v2.6 */
|
|
#define Z_COMPILER_HAS_C99_IDENTIFIER_FUNC 1 /* v2.6 */
|
|
#define Z_COMPILER_HAS_C99_PREPROCESSOR_OPERATOR_PRAGMA 1 /* v2.6 */
|
|
#define Z_COMPILER_HAS_C99_STD_PRAGMA_CX_LIMITED_RANGE 1 /* v2.6 */
|
|
#define Z_COMPILER_HAS_C99_STD_PRAGMA_FP_CONTRACT 1 /* v2.6 */
|
|
|
|
#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
|
|
# define Z_COMPILER_HAS_C99_COMPOUND_LITERAL 1 /* v2.6 */
|
|
# define Z_COMPILER_HAS_C99_DESIGNATED_INITIALIZATION 1 /* v2.6 */
|
|
# define Z_COMPILER_HAS_C99_FLEXIBLE_ARRAY_MEMBER 1 /* v2.6 */
|
|
# define Z_COMPILER_HAS_C99_STATIC_IN_ARRAY_PARAMETER_DECLARATION 1 /* v2.6 */
|
|
# define Z_COMPILER_HAS_C99_TYPE_QUALIFIERS_IN_ARRAY_PARAMETER_DECLARATION 1 /* v2.6 */
|
|
# define Z_COMPILER_HAS_C99_TYPE_QUALIFIER_RESTRICT 1 /* v2.6 */
|
|
|
|
# ifndef __STDC_NO_VLA__ /* Not found in Clang's sources. */
|
|
# define Z_COMPILER_HAS_C99_VLA 1 /* v2.6 */
|
|
# endif
|
|
#endif
|
|
|
|
#if defined(__cplusplus) || \
|
|
(defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L)
|
|
|
|
# define Z_COMPILER_HAS_C99_CONVERSION_OF_NON_LVALUE_ARRAY_TO_POINTER 1 /* v2.6 */
|
|
# define Z_COMPILER_HAS_C99_FOR_WITH_DECLARATION 1 /* v2.6 */
|
|
# define Z_COMPILER_HAS_C99_MIXED_DECLARATIONS_AND_CODE 1 /* v2.6 */
|
|
# define Z_COMPILER_HAS_C99_NON_CONSTANT_INITIALIZATION_FOR_LOCAL_AGGREGATE 1
|
|
# define Z_COMPILER_HAS_C99_UNIVERSAL_CHARACTER_NAME 1 /* v2.6 */
|
|
# define Z_COMPILER_HAS_C99_SPECIFIER_INLINE 1 /* v2.6 */
|
|
#endif
|
|
|
|
#if defined(__cplusplus) || \
|
|
Z_z_HAS_GNU_EXTENSIONS || \
|
|
(defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L)
|
|
|
|
# define Z_COMPILER_HAS_C99_CPP_STYLE_COMMENT 1 /* v2.6 */
|
|
#endif
|
|
|
|
#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || \
|
|
(Z_COMPILER_VERSION >= Z_VERSION(2,9,0) && \
|
|
defined(__cplusplus) && (__cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X__)))
|
|
|
|
# define Z_COMPILER_HAS_C99_EMPTY_MACRO_ARGUMENT 1 /* v2.6 (C99), v2.9 (C++11 S) */
|
|
# define Z_COMPILER_HAS_C99_VARIADIC_MACRO 1 /* v2.6 (C99), v2.9 (C++11 S) */
|
|
# define Z_COMPILER_HAS_C99_TYPE_LONG_LONG 1 /* v2.6 (C99), v2.9 (C++11 S) */
|
|
#endif
|
|
|
|
#if Z_COMPILER_VERSION >= Z_VERSION(3,3,0) && \
|
|
(defined(__cplusplus) || (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L))
|
|
|
|
# define Z_COMPILER_HAS_C99_EXTENDED_IDENTIFIER 1 /* v3.3 (RN-T) */
|
|
#endif
|
|
|
|
#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || \
|
|
(defined(__cplusplus) && (__cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X__)))
|
|
|
|
# define Z_COMPILER_HAS_C99_TRAILING_COMMA_ALLOWED_IN_ENUMERATION 1 /* v2.6 */
|
|
#endif
|
|
|
|
#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || \
|
|
(defined(__cpp_hex_float ) && __cpp_hex_float >= 201603L) /* v4.0 */ || \
|
|
(Z_COMPILER_VERSION >= Z_VERSION(3,9,0) && \
|
|
Z_COMPILER_VERSION < Z_VERSION(4,0,0) && \
|
|
defined(__cplusplus) && __cplusplus >= 201406L)
|
|
|
|
# define Z_COMPILER_HAS_C99_LITERAL_HEXADECIMAL_FLOATING_POINT 1 /* v2.6 (C99), v3.9 (C++17 T!) */
|
|
#endif
|
|
|
|
/*---------------------------------------------------------------------.
|
|
| BUG: _Bool has always been available in all versions of C but not in |
|
|
| C++, although it was available in C++ by mistake in v2.6 and v2.7. | MAL, mirar
|
|
'=====================================================================*/
|
|
#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || \
|
|
(!defined(__cplusplus) && Z_COMPILER_VERSION <= Z_VERSION(9,1,0))
|
|
|
|
# define Z_COMPILER_HAS_C99_TYPE_BOOL 1 /* v2.6 */
|
|
#endif
|
|
|
|
#ifndef __STDC_NO_COMPLEX__ /* Not found in Clang's sources. */
|
|
# define Z_COMPILER_HAS_C99_TYPE_MODIFIER_COMPLEX 1 /* v2.6 */
|
|
|
|
# ifdef __DBL_MAX__ /* v2.6 */
|
|
# define Z_COMPILER_HAS_C99_TYPE_DOUBLE_COMPLEX 1 /* v2.6 */
|
|
# endif
|
|
|
|
# ifdef __FLT_MAX__ /* v2.6 */
|
|
# define Z_COMPILER_HAS_C99_TYPE_FLOAT_COMPLEX 1 /* v2.6 */
|
|
# endif
|
|
|
|
# ifdef __LDBL_MAX__ /* v2.6 */
|
|
# define Z_COMPILER_HAS_C99_TYPE_LONG_DOUBLE_COMPLEX 1 /* v2.6 */
|
|
# endif
|
|
#endif
|
|
|
|
/*#define Z_COMPILER_HAS_C99_IDEMPOTENT_TYPE_QUALIFIERS*/ /* Always generate warnings. */
|
|
/*#define Z_COMPILER_HAS_C99_STD_PRAGMA_FENV_ACCESS*/ /* FENV_ACCESS ON is not implemented. */
|
|
/*#define Z_COMPILER_HAS_C99_TYPE_DOUBLE_IMAGINARY*/ /* _Imaginary recognized, but unusable. */
|
|
/*#define Z_COMPILER_HAS_C99_TYPE_FLOAT_IMAGINARY*/ /* _Imaginary recognized, but unusable. */
|
|
/*#define Z_COMPILER_HAS_C99_TYPE_LONG_DOUBLE_IMAGINARY*/ /* _Imaginary recognized, but unusable. */
|
|
/*#define Z_COMPILER_HAS_C99_TYPE_MODIFIER_IMAGINARY*/ /* _Imaginary recognized, but unusable. */
|
|
|
|
/* MARK: - Language: C11 */
|
|
|
|
#if Z_COMPILER_VERSION >= Z_VERSION(3,1,0)
|
|
# if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
|
|
# define Z_COMPILER_HAS_C11_ANONYMOUS_STRUCTURE_AS_MEMBER 1 /* v3.1 (N-T!) */
|
|
# endif
|
|
|
|
# if Z_COMPILER_VERSION >= Z_VERSION(3,3,0)
|
|
/*----------------------------------------------------------------------------.
|
|
| NOTE: Since v3.3, __has_feature(c_thread_local) only returns 1 in C11 and |
|
|
| later, but _Thread_local compiles without warnings in any version of C/C++. |
|
|
'============================================================================*/
|
|
/*# if __has_feature(c_thread_local)*/ /* v3.3 */
|
|
# define Z_COMPILER_HAS_C11_STORAGE_CLASS_THREAD_LOCAL 1 /* v3.3 (T) */
|
|
/*# endif*/
|
|
|
|
/*---------------------------------------------------------------------.
|
|
| BUG: Since v3.0, __has_extension(c_alignas) always returns 1, and |
|
|
| __has_feature(c_alignas) returns 1 in C11 and later. Despite this, |
|
|
| explicitly using _Alignas() when declaring an identifier generates |
|
|
| errors in C++, and the same happens in C between v3.0 and v3.2. |
|
|
| However, using _Alignas() within a type definition seems to be safe. |
|
|
'======================================================================*/
|
|
# if __has_feature(c_alignas) /* v3.0 */
|
|
# define Z_COMPILER_HAS_C11_SPECIFIER_ALIGNAS 1 /* v3.0 (N), v3.3 (T) */
|
|
# endif
|
|
|
|
# if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
|
|
# define Z_COMPILER_HAS_C11_SPECIFIER_NORETURN 1 /* v3.3 (T) */
|
|
# endif
|
|
|
|
/*--------------------------------------------------------------.
|
|
| BUG: Since v3.1, __has_extension(c_atomic) always returns 1, |
|
|
| but _Atomic was not supported as a type qualifier until v3.3. |
|
|
'==============================================================*/
|
|
# if __has_feature(c_atomic) /* v3.1 */
|
|
# define Z_COMPILER_HAS_C11_TYPE_QUALIFIER_ATOMIC 1 /* v3.3 (T) */
|
|
# endif
|
|
# endif
|
|
#endif
|
|
|
|
#if defined(__cplusplus) || \
|
|
(defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L)
|
|
|
|
# define Z_COMPILER_HAS_C11_ANONYMOUS_UNION_AS_MEMBER 1 /* v2.6? (C++), v3.1 (C11 N-T!) */
|
|
#endif
|
|
|
|
#if __has_feature(c_generic_selections) /* v3.0 */
|
|
# define Z_COMPILER_HAS_C11_GENERIC_SELECTION 1 /* v3.0 (N-T) */
|
|
#endif
|
|
|
|
#if __has_feature(c_static_assert) /* v3.0 */
|
|
# define Z_COMPILER_HAS_C11_STATIC_ASSERTION 1 /* v3.0 (N-T) */
|
|
#endif
|
|
|
|
#if defined(__cplusplus) || \
|
|
Z_z_HAS_MSVC_COMPATIBILITY || \
|
|
(defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L)
|
|
|
|
# define Z_COMPILER_HAS_C11_TYPEDEF_REDECLARATION 1 /* v2.6? (C++, MSVC), v3.1 (C11 T) */
|
|
#endif
|
|
|
|
#if (defined(__cpp_unicode_characters) && __cpp_unicode_characters >= 200704L) /* v3.4 */ || \
|
|
(Z_COMPILER_VERSION < Z_VERSION(3,4,0) && defined(__cplusplus ) && __cplusplus >= 201103L) || \
|
|
(Z_COMPILER_VERSION >= Z_VERSION(3,3,0) && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L)
|
|
|
|
# define Z_COMPILER_HAS_C11_LITERAL_CHAR16_T_CHARACTER 1 /* v2.9 (C++11 S), v3.0 (C++11 RN), v3.3 (C11 T) */
|
|
# define Z_COMPILER_HAS_C11_LITERAL_CHAR16_T_STRING 1 /* v2.9 (C++11 S), v3.0 (C++11 RN), v3.3 (C11 T) */
|
|
# define Z_COMPILER_HAS_C11_LITERAL_CHAR32_T_CHARACTER 1 /* v2.9 (C++11 S), v3.0 (C++11 RN), v3.3 (C11 T) */
|
|
# define Z_COMPILER_HAS_C11_LITERAL_CHAR32_T_STRING 1 /* v2.9 (C++11 S), v3.0 (C++11 RN), v3.3 (C11 T) */
|
|
#endif
|
|
|
|
#if (Z_COMPILER_VERSION >= Z_VERSION(3,3,0) && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) || \
|
|
(defined(__cpp_unicode_literals) && __cpp_unicode_literals >= 200710L) /* v3.4 */ || \
|
|
(defined(__cplusplus) && \
|
|
(__has_feature(cxx_unicode_literals) /* v3.1 */ || \
|
|
(Z_COMPILER_VERSION == Z_VERSION(3,0,0) && __cplusplus >= 201103L)))
|
|
|
|
# define Z_COMPILER_HAS_C11_LITERAL_UTF8_STRING 1 /* v3.0 (C++11 N-S-T), v3.3 (C11 T) */
|
|
#endif
|
|
|
|
#if __has_feature(c_alignof) /* v3.6 */ || \
|
|
(Z_COMPILER_VERSION >= Z_VERSION(3,2,0) && \
|
|
Z_COMPILER_VERSION < Z_VERSION(3,6,0) && \
|
|
defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L)
|
|
|
|
# define Z_COMPILER_HAS_C11_OPERATOR_ALIGNOF 1 /* v3.2 (N-T) */
|
|
#endif
|
|
|
|
#if __has_feature(c_atomic) /* v3.1 */
|
|
# define Z_COMPILER_HAS_C11_TYPE_MODIFIER_ATOMIC 1 /* v3.1 (T) */
|
|
#endif
|
|
|
|
/* MARK: - Language: Apple C extensions */
|
|
|
|
#if Z_z_HAS_EXTENSION(blocks) /* v2.6 */ || \
|
|
defined(__BLOCKS__) /* v2.6 */
|
|
|
|
# define Z_COMPILER_HAS_APPLE_C_BLOCK_OBJECT 1 /* v2.6 */
|
|
#endif
|
|
|
|
/* MARK: - Language: Clang C extensions */
|
|
|
|
#if Z_COMPILER_VERSION >= Z_VERSION(2,7,0)
|
|
# define Z_COMPILER_HAS_CLANG_C_PREPROCESSOR_OPERATOR_HAS_INCLUDE 1 /* v2.7 */
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
|
|
/* MARK: - Language: C++98 */
|
|
|
|
# define Z_COMPILER_HAS_CPP98_SFINAE 1 /* v2.6 */
|
|
# define Z_COMPILER_HAS_CPP98_TYPE_BOOL 1 /* v2.6 */
|
|
# define Z_COMPILER_HAS_CPP98_TYPE_WCHAR_T 1 /* v2.6 */
|
|
|
|
# if defined(_M_IX86 ) || /* v2.7 */ \
|
|
defined(_M_X64 ) || /* v2.7 */ \
|
|
defined(_M_ARM64) /* v5.0 */
|
|
|
|
/*-----------------------------------------------------------------------.
|
|
| NOTE: According to Clang's documentation, support for C++ exceptions |
|
|
| compatible with the MSVC C++ ABI was not "mostly complete" until v3.9. |
|
|
'=======================================================================*/
|
|
# if defined(_CPPUNWIND) /* v2.9 */ && Z_COMPILER_VERSION >= Z_VERSION(3,9,0)
|
|
# define Z_COMPILER_HAS_CPP98_EXCEPTIONS 1 /* v3.9 */
|
|
# endif
|
|
|
|
# ifdef _CPPRTTI /* v3.0 */
|
|
# define Z_COMPILER_HAS_CPP98_RTTI 1 /* v3.0? */
|
|
# endif
|
|
|
|
# else
|
|
# if (defined(__cpp_exceptions) && __cpp_exceptions >= 199711L) /* v3.6 */ || \
|
|
__has_feature(cxx_exceptions) /* v2.7 */ || \
|
|
defined(__EXCEPTIONS) /* v2.6 */ /* IMPORTANT: READ 3.5 Release Notes, bevaiour changed. */
|
|
|
|
# define Z_COMPILER_HAS_CPP98_EXCEPTIONS 1 /* v2.6 */
|
|
# endif
|
|
|
|
# if defined(__cpp_rtti) && __cpp_rtti >= 199711L /* v3.6 */ || \
|
|
__has_feature(cxx_rtti) /* v2.7 */ || \
|
|
defined(__GXX_RTTI) /* v2.8 */
|
|
|
|
# define Z_COMPILER_HAS_CPP98_RTTI 1 /* v2.7 (S?) */
|
|
# endif
|
|
# endif
|
|
|
|
/* MARK: - Language: C++03 */
|
|
|
|
# define Z_COMPILER_HAS_CPP03_VALUE_INITIALIZATION 1 /* v2.6 */
|
|
|
|
/* MARK: - Language: C++11 */
|
|
|
|
# define Z_COMPILER_HAS_CPP11_IDENTIFIER_FUNC 1 /* v2.6?, v2.9 (S) */
|
|
|
|
# if Z_COMPILER_VERSION >= Z_VERSION(2,9,0)
|
|
# define Z_COMPILER_HAS_CPP11_EXPRESSION_SFINAE 1 /* v2.9 (S) */
|
|
|
|
# if __cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X__)
|
|
# define Z_COMPILER_HAS_CPP11_C99_PREPROCESSOR 1 /* v2.9 (S) */
|
|
# define Z_COMPILER_HAS_CPP11_EXTENDED_FRIEND_DECLARATION 1 /* v2.9 (S) */
|
|
# define Z_COMPILER_HAS_CPP11_TYPE_LONG_LONG 1 /* v2.9 (S) */
|
|
|
|
/*-----------------------------------------------------------------------------.
|
|
| NOTE: In v3.0 (and possibly v2.9), extern templates compile without warnings |
|
|
| in any version of C++. Z only recognizes this feature in C++11 and later. |
|
|
'=============================================================================*/
|
|
# define Z_COMPILER_HAS_CPP11_EXTERN_TEMPLATE 1 /* v2.9 (S) */
|
|
# endif
|
|
|
|
# if __cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X__) || \
|
|
Z_z_HAS_MSVC_COMPATIBILITY
|
|
|
|
# define Z_COMPILER_HAS_CPP11_INITIALIZATION_OF_CLASS_OBJECT_BY_RVALUE 1 /* v2.9 (S) */
|
|
# endif
|
|
|
|
# if __has_feature(cxx_auto_type) /* v2.7 */
|
|
# define Z_COMPILER_HAS_CPP11_MULTI_DECLARATOR_AUTO 1 /* v2.7?, v2.9 (S) */
|
|
# define Z_COMPILER_HAS_CPP11_TYPE_AUTO 1 /* v2.7?, v2.9 (S) */
|
|
|
|
/*-----------------------------------------------------------------.
|
|
| BUG: In v3.0 (and possibly earlier versions), using `auto` as a |
|
|
| storage class generates warnings in C++03 and earlier. This must |
|
|
| be tolerated to not break compatibility with existing software. |
|
|
'=================================================================*/
|
|
# define Z_COMPILER_HAS_CPP11_REMOVAL_OF_AUTO_AS_STORAGE_CLASS 1 /* v2.7?, v2.9 (S) */
|
|
# endif
|
|
|
|
# if Z_COMPILER_VERSION >= Z_VERSION(3,0,0)
|
|
# if __cplusplus >= 201103L
|
|
# define Z_COMPILER_HAS_CPP11_MOVE_SPECIAL_MEMBER_FUNCTIONS 1 /* v3.0 (S-T) */
|
|
# define Z_COMPILER_HAS_CPP11_OPERATOR_CASE_SIZEOF_NON_STATIC_DATA_MEMBER 1 /* v3.0 (T), v3.1 (S) */
|
|
# endif
|
|
|
|
# if Z_COMPILER_VERSION >= Z_VERSION(3,1,0)
|
|
# if __cplusplus >= 201103L
|
|
# define Z_COMPILER_HAS_CPP11_UNIVERSAL_CHARACTER_NAME 1 /* v3.1 (S-T) */
|
|
|
|
/*------------------------------------------------------------.
|
|
| BUG: DR1206 14.5.1.4 Enumeration members of class templates |
|
|
| TODO: Read v3.9 release notes (related?) |
|
|
'============================================================*/
|
|
# define Z_COMPILER_HAS_CPP11_OPAQUE_ENUMERATION_DECLARATION 1 /* v3.1 (N-S-T), v3.2 (N) */
|
|
# endif
|
|
|
|
/*-----------------------------------------------------------------------.
|
|
| BUG: Since v3.0, __has_feature(cxx_explicit_conversions) returns 1 in |
|
|
| C++11 and later, but this feature did not work properly until v3.1. |
|
|
'=======================================================================*/
|
|
# if __has_feature(cxx_explicit_conversions) /* v3.0 */
|
|
# define Z_COMPILER_HAS_CPP11_EXPLICIT_CONVERSION_OPERATOR 1 /* v3.0 (S), v3.1 (T) */
|
|
# endif
|
|
|
|
# if Z_COMPILER_VERSION >= Z_VERSION(3,2,0) && __cplusplus >= 201103L
|
|
# define Z_COMPILER_HAS_CPP11_STD_LAYOUT 1 /* v3.0 (S), v3.2? (T!?) *//* TODO: More tests. */
|
|
# endif
|
|
# endif
|
|
# endif
|
|
# endif
|
|
|
|
# if __has_feature(cxx_local_type_template_args) /* v3.1 */ || \
|
|
(Z_COMPILER_VERSION == Z_VERSION(3,0,0) && __cplusplus >= 201103L) || \
|
|
(Z_COMPILER_VERSION == Z_VERSION(2,9,0) && defined(__GXX_EXPERIMENTAL_CXX0X__))
|
|
|
|
# define Z_COMPILER_HAS_CPP11_ANONYMOUS_TYPE_AS_TEMPLATE_ARGUMENT 1 /* v2.9 (S) */
|
|
# define Z_COMPILER_HAS_CPP11_LOCAL_TYPE_AS_TEMPLATE_ARGUMENT 1 /* v2.9 (S) */
|
|
# endif
|
|
|
|
# if (defined(__cpp_initializer_lists) && __cpp_initializer_lists >= 200806L) /* v3.6 */ || \
|
|
__has_feature(cxx_generalized_initializers) /* v3.1 */
|
|
|
|
# define Z_COMPILER_HAS_CPP11_COPY_LIST_INITIALIZATION 1 /* v3.1 (N-S-T) */
|
|
# define Z_COMPILER_HAS_CPP11_DIRECT_LIST_INITIALIZATION 1 /* v3.1 (N-S-T) */
|
|
# define Z_COMPILER_HAS_CPP11_INITIALIZER_LIST 1 /* v3.1 (N-S-T) [No library support until v3.3?] */
|
|
# endif
|
|
|
|
# if (defined(__cpp_nsdmi) && (__cpp_nsdmi >= 200809L)) /* v3.6 */ || \
|
|
__has_feature(cxx_nonstatic_member_init) /* v3.0 */
|
|
|
|
# define Z_COMPILER_HAS_CPP11_DEFAULT_MEMBER_INITIALIZER 1 /* v3.0 (N-S-T) */
|
|
# endif
|
|
|
|
# if __has_feature(cxx_default_function_template_args) /* v2.9 */
|
|
# define Z_COMPILER_HAS_CPP11_DEFAULT_TEMPLATE_ARGUMENTS_FOR_FUNCTION_TEMPLATE 1 /* v2.9 (S) */
|
|
# endif
|
|
|
|
# if (defined(__cpp_delegating_constructors) && __cpp_delegating_constructors >= 200604L) /* v3.6 */ || \
|
|
__has_feature(cxx_delegating_constructors) /* v3.0 */
|
|
|
|
# define Z_COMPILER_HAS_CPP11_DELEGATING_CONSTRUCTORS 1 /* v3.0 (N-S-T) */
|
|
# endif
|
|
|
|
# if __has_feature(cxx_deleted_functions) /* v2.7 */
|
|
# define Z_COMPILER_HAS_CPP11_DELETED_FUNCTION 1 /* v2.6 (S), v2.9 (S) */
|
|
# endif
|
|
|
|
# if __has_feature(cxx_defaulted_functions) /* v3.1 */ || \
|
|
(Z_COMPILER_VERSION == Z_VERSION(3,0,0) && __cplusplus >= 201103L)
|
|
|
|
# define Z_COMPILER_HAS_CPP11_EXPLICITLY_DEFAULTED_SPECIAL_MEMBER_FUNCTION 1 /* v3.0 (N-S-T) */
|
|
# endif
|
|
|
|
# if (defined(__cpp_variadic_templates) && __cpp_variadic_templates >= 200704L) /* v3.4 */ || \
|
|
__has_feature(cxx_variadic_templates) /* v2.9 */
|
|
|
|
# define Z_COMPILER_HAS_CPP11_EXTENDED_VARIADIC_TEMPLATE_TEMPLATE_PARAMETERS 1 /* v2.9 (S) */
|
|
# define Z_COMPILER_HAS_CPP11_VARIADIC_TEMPLATE 1 /* v2.9 (N-S) */
|
|
# define Z_COMPILER_HAS_CPP11_OPERATOR_CASE_SIZEOF_PARAMETER_PACK 1 /* v2.9 (S) */
|
|
# endif
|
|
|
|
# if __has_feature(cxx_strong_enums) /* v2.9 */
|
|
# define Z_COMPILER_HAS_CPP11_FIXED_ENUMERATION 1 /* v2.9 (S) */
|
|
# define Z_COMPILER_HAS_CPP11_SCOPED_ENUMERATION 1 /* v2.9 (S) */
|
|
# endif
|
|
|
|
/*-----------------------------------------------------------------------.
|
|
| NOTE: Inheriting constructors seem to work in v3.0 (but not in v3.1 or |
|
|
| v3.2). However, since the implementation of that version is perhaps |
|
|
| unstable, Z only detects this feature using the appropriate macros. |
|
|
'=======================================================================*/
|
|
# if (defined(__cpp_inheriting_constructors) && __cpp_inheriting_constructors >= 200802L) /* v3.6 */ || \
|
|
__has_feature(cxx_inheriting_constructors) /* v3.3 */
|
|
|
|
# define Z_COMPILER_HAS_CPP11_INHERITING_CONSTRUCTORS 1 /* v3.3 (N-S-T) */
|
|
# endif
|
|
|
|
/*------------------------------------------------------.
|
|
| NOTE: According to Clang's sources, inline namespaces |
|
|
| seem to be implemented since v2.8. |
|
|
'======================================================*/
|
|
# if __has_feature(cxx_inline_namespaces) /* v2.8 */
|
|
# define Z_COMPILER_HAS_CPP11_INLINE_NAMESPACE 1 /* v2.9 (S) */
|
|
# endif
|
|
|
|
# if (defined(__cpp_lambdas) && __cpp_lambdas >= 200907L) /* v3.4 */ || \
|
|
__has_feature(cxx_lambdas) /* v3.1 */
|
|
|
|
# define Z_COMPILER_HAS_CPP11_LAMBDA 1 /* v3.1 (N-S-T) */
|
|
# endif
|
|
|
|
# if (defined(__cpp_range_based_for) && __cpp_range_based_for >= 200907L) /* v3.6 */ || \
|
|
__has_feature(cxx_range_for) /* v3.0 */
|
|
|
|
# define Z_COMPILER_HAS_CPP11_RANGE_BASED_FOR 1 /* v3.0 (N-S-T) */
|
|
# endif
|
|
|
|
# if (defined(__cpp_ref_qualifiers) && __cpp_ref_qualifiers >= 200710L) /* v3.6 */ || \
|
|
__has_feature(cxx_reference_qualified_functions) /* v2.9 */
|
|
|
|
# define Z_COMPILER_HAS_CPP11_REFERENCE_QUALIFIED_NON_STATIC_MEMBER_FUNCTION 1 /* v2.9 (N-S) */
|
|
# endif
|
|
|
|
# if __cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X__)
|
|
# define Z_COMPILER_HAS_CPP11_RIGHT_ANGLE_BRACKETS 1 /* v2.6 (S), v2.9 (S) */
|
|
# define Z_COMPILER_HAS_CPP11_TRAILING_COMMA_ALLOWED_IN_ENUMERATION 1 /* v2.6? */
|
|
# endif
|
|
|
|
# if (defined(__cpp_rvalue_references) && __cpp_rvalue_references >= 200610L) /* v3.4 */ || \
|
|
__has_feature(cxx_rvalue_references) /* v2.9 */
|
|
|
|
# define Z_COMPILER_HAS_CPP11_RVALUE_REFERENCE 1 /* v2.9 (N-S) */
|
|
# endif
|
|
|
|
/*----------------------------------------------------------------------------.
|
|
| NOTE: According to Clang's documentation, the standardized attribute syntax |
|
|
| was added in v3.3, but this feature seems to have been present since v2.7. |
|
|
| The [[carries_dependency]] attribute is recognized but has no effect, and |
|
|
| its use within a parameter-declaration did not fully conform to the C++11 |
|
|
| standard until v3.1. |
|
|
'============================================================================*/
|
|
# if (defined(__cpp_attributes) && __cpp_attributes >= 200809L) /* v3.4 */ || \
|
|
__has_feature(cxx_attributes) /* v2.7 */
|
|
|
|
# define Z_COMPILER_HAS_CPP11_STANDARDIZED_ATTRIBUTE_SYNTAX 1 /* v2.7?, v3.3 (N-S) */
|
|
# define Z_COMPILER_HAS_CPP11_ATTRIBUTE_NORETURN 1 /* v2.7?, v3.3 (N-S) */
|
|
|
|
# if Z_COMPILER_VERSION >= Z_VERSION(3,1,0)
|
|
# define Z_COMPILER_HAS_CPP11_ATTRIBUTE_CARRIES_DEPENDENCY 1 /* v3.1 (T), v3.3 (N-S) */
|
|
# endif
|
|
# endif
|
|
|
|
/*-----------------------------------------------------------------------------.
|
|
| NOTE: Since v9.0, static assertions compile without warnings in any version |
|
|
| of C++ when the MSVC compatibility mode is enabled. However, Z only detects |
|
|
| this feature using the appropriate macros, as this behaviour could change in |
|
|
| future versions of Clang. |
|
|
'=============================================================================*/
|
|
# if (defined(__cpp_static_assert) && __cpp_static_assert >= 200410L) /* v3.4 */ || \
|
|
__has_feature(cxx_static_assert) /* v2.7 */
|
|
|
|
# define Z_COMPILER_HAS_CPP11_STATIC_ASSERTION 1 /* v2.6 (S), v2.9 (S) */
|
|
# endif
|
|
|
|
/*-----------------------------------------------------------------------------.
|
|
| IMPORTANT:
|
|
'=============================================================================*/
|
|
# if defined(__cpp_threadsafe_static_init) && __cpp_threadsafe_static_init >= 200806L /* v5.0 */
|
|
# define Z_COMPILER_HAS_CPP11_THREAD_SAFE_STATIC_INITIALIZATION 1 /* v2.6?, v2.9 (S*) */
|
|
# endif
|
|
|
|
# if __has_feature(cxx_trailing_return) /* v2.9 */
|
|
# define Z_COMPILER_HAS_CPP11_TRAILING_RETURN_TYPE 1 /* v2.9 (S) */
|
|
# endif
|
|
|
|
# if (defined(__cpp_alias_templates) && __cpp_alias_templates >= 200704L) /* v3.6 */ || \
|
|
__has_feature(cxx_alias_templates) /* v3.0 */
|
|
|
|
# define Z_COMPILER_HAS_CPP11_TYPE_ALIAS 1 /* v3.0 (N-S-T) */
|
|
# define Z_COMPILER_HAS_CPP11_TYPE_ALIAS_TEMPLATE 1 /* v3.0 (N-S-T) */
|
|
# endif
|
|
|
|
# if __has_feature(cxx_unrestricted_unions) /* v3.1 */
|
|
# define Z_COMPILER_HAS_CPP11_UNRESTRICTED_UNION 1 /* v3.0 (T?), v3.1 (N-S) *//* TODO: More tests. */
|
|
# endif
|
|
|
|
# if __has_feature(cxx_nullptr) /* v3.0 */
|
|
# define Z_COMPILER_HAS_CPP11_LITERAL_NULLPTR 1 /* v3.0 (N-S-T) */
|
|
# endif
|
|
|
|
# if (defined(__cpp_raw_strings) && __cpp_raw_strings >= 200710L) /* v3.4 */ || \
|
|
__has_feature(cxx_raw_string_literals) /* v3.1 */ || \
|
|
(Z_COMPILER_VERSION == Z_VERSION(3,0,0) && __cplusplus >= 201103L)
|
|
|
|
# define Z_COMPILER_HAS_CPP11_LITERAL_RAW_STRING 1 /* v3.0 (N-S-T) */
|
|
# endif
|
|
|
|
# if (defined(__cpp_user_defined_literals) && __cpp_user_defined_literals >= 200809L) /* v3.4 */ || \
|
|
__has_feature(cxx_user_literals) /* v3.1 */
|
|
|
|
# define Z_COMPILER_HAS_CPP11_LITERAL_USER_DEFINED 1 /* v3.1 (N-S-T) */
|
|
# endif
|
|
|
|
# if (defined(__cpp_unicode_literals) && __cpp_unicode_literals >= 200710L) /* v3.4 */ || \
|
|
__has_feature(cxx_unicode_literals) /* v3.1 */ || \
|
|
(Z_COMPILER_VERSION == Z_VERSION(3,0,0) && __cplusplus >= 201103L)
|
|
|
|
# define Z_COMPILER_HAS_CPP11_LITERAL_UTF8_STRING 1 /* v3.0 (N-S-T) */
|
|
# endif
|
|
|
|
# if __has_feature(cxx_alignof) /* v3.6 */ || \
|
|
(Z_COMPILER_VERSION >= Z_VERSION(3,0,0) && \
|
|
Z_COMPILER_VERSION < Z_VERSION(3,6,0) && \
|
|
__cplusplus >= 201103L)
|
|
|
|
# define Z_COMPILER_HAS_CPP11_OPERATOR_ALIGNOF 1 /* v3.0 (N-S-T), v3.3 (S) */
|
|
# endif
|
|
|
|
# if __has_feature(cxx_noexcept) /* v3.0 */
|
|
# define Z_COMPILER_HAS_CPP11_OPERATOR_NOEXCEPT 1 /* v2.9 (S), v3.0 (N-S) */
|
|
# define Z_COMPILER_HAS_CPP11_SPECIFIER_NOEXCEPT 1 /* v2.9 (S), v3.0 (N-S) */
|
|
# endif
|
|
|
|
# if __has_feature(cxx_alignas) /* v3.0 */
|
|
# define Z_COMPILER_HAS_CPP11_SPECIFIER_ALIGNAS 1 /* v3.0 (N-S-T), v3.3 (N-S) */
|
|
# endif
|
|
|
|
# if (defined(__cpp_constexpr) && __cpp_constexpr >= 200704L) /* v3.4 */ || \
|
|
__has_feature(cxx_constexpr) /* v3.1 */
|
|
|
|
# define Z_COMPILER_HAS_CPP11_SPECIFIER_CONSTEXPR 1 /* v3.1 (N-S-T) */
|
|
# endif
|
|
|
|
# if (defined(__cpp_decltype) && __cpp_decltype >= 200707L) /* v3.4 */ || \
|
|
__has_feature(cxx_decltype) /* v2.7 */
|
|
|
|
# define Z_COMPILER_HAS_CPP11_SPECIFIER_DECLTYPE 1 /* v2.6 (S), v2.9 (S) */
|
|
# endif
|
|
|
|
# if __has_feature(cxx_override_control) /* v3.0 */
|
|
# define Z_COMPILER_HAS_CPP11_SPECIFIER_FINAL 1 /* v3.0 (S-T) */
|
|
# define Z_COMPILER_HAS_CPP11_SPECIFIER_OVERRIDE 1 /* v3.0 (N-S-T) */
|
|
# endif
|
|
|
|
# if __has_feature(cxx_decltype_incomplete_return_types) /* v3.1 */
|
|
# define Z_COMPILER_HAS_CPP11_SPECIFIER_CASE_DECLTYPE_INCOMPLETE_RETURN_TYPE 1 /* v3.1 (S-T) */
|
|
# endif
|
|
|
|
/*-------------------------------------------------------.
|
|
| IMPORTANT: thread_local support requires a C++ runtime |
|
|
| library providing the __cxa_thread_atexit function. |
|
|
'=======================================================*/
|
|
# if __has_feature(cxx_thread_local) /* v3.3 */
|
|
# define Z_COMPILER_HAS_CPP11_STORAGE_CLASS_THREAD_LOCAL 1 /* v3.3 (N-S-T) */
|
|
# endif
|
|
|
|
# if (defined(__cpp_unicode_characters) && __cpp_unicode_characters >= 200704L) /* v3.4 */ || \
|
|
(Z_COMPILER_VERSION < Z_VERSION(3,4,0) && __cplusplus >= 201103L)
|
|
|
|
// TODO: Fails with -fms-compatibility on Apple Clang (Z_z_HAS_MSVC_COMPATIBILITY)
|
|
# if !Z_z_HAS_MSVC_COMPATIBILITY
|
|
# define Z_COMPILER_HAS_CPP11_TYPE_CHAR16_T 1 /* v2.9 (S), v3.0 (N) */
|
|
# define Z_COMPILER_HAS_CPP11_TYPE_CHAR32_T 1 /* v2.9 (S), v3.0 (N) */
|
|
# endif
|
|
# endif
|
|
|
|
/* MARK: - Language: C++14 */
|
|
|
|
# if (defined(__cpp_digit_separators) && __cpp_digit_separators >= 201309L) /* v3.6 */ || \
|
|
(Z_COMPILER_VERSION >= Z_VERSION(3,4,0) && \
|
|
Z_COMPILER_VERSION < Z_VERSION(3,6,0) && \
|
|
__cplusplus >= 201305L)
|
|
|
|
# define Z_COMPILER_HAS_CPP14_APOSTROPHE_AS_DIGIT_SEPARATOR 1 /* v3.4 (N-S-T) */
|
|
# endif
|
|
|
|
# if (defined(__cpp_constexpr) && __cpp_constexpr >= 201304L) /* v3.4 */ || \
|
|
__has_feature(cxx_relaxed_constexpr) /* v3.4 */
|
|
|
|
# define Z_COMPILER_HAS_CPP14_CONSTEXPR_FUNCTION 1 /* v3.4 (N-S-T) */
|
|
# endif
|
|
|
|
# if __has_feature(cxx_contextual_conversions) /* v3.4 */
|
|
# define Z_COMPILER_HAS_CPP14_CONTEXTUAL_CONVERSION 1 /* v3.4 (S-T) */
|
|
# endif
|
|
|
|
# if (defined(__cpp_aggregate_nsdmi) && __cpp_aggregate_nsdmi >= 201304L) /* v3.4 */ || \
|
|
__has_feature(cxx_aggregate_nsdmi) /* v3.3 */
|
|
|
|
# define Z_COMPILER_HAS_CPP14_DEFAULT_MEMBER_INITIALIZER_FOR_AGGREGATE 1 /* v3.3 (N-S-T) */
|
|
# endif
|
|
|
|
# if (defined(__cpp_generic_lambdas) && __cpp_generic_lambdas >= 201304L) /* v3.4 */ || \
|
|
__has_feature(cxx_generic_lambdas) /* v3.5 */
|
|
|
|
# define Z_COMPILER_HAS_CPP14_GENERIC_LAMBDA 1 /* v3.4 (N-S-T) */
|
|
# endif
|
|
|
|
# if (defined(__cpp_init_captures) && __cpp_init_captures >= 201304L) /* v3.4 */ || \
|
|
__has_feature(cxx_init_captures) /* v3.4 */
|
|
|
|
# define Z_COMPILER_HAS_CPP14_INITIALIZED_LAMBDA_CAPTURE 1 /* v3.4 (N-S-T) */
|
|
# endif
|
|
|
|
/*-------------------------------------------------------------.
|
|
| NOTE: Based on testing, the return type deduction for normal |
|
|
| functions seems to work in v3.3, but the documentation for |
|
|
| that version specifies that the implementation is partial. |
|
|
'=============================================================*/
|
|
# if (defined(__cpp_return_type_deduction) && __cpp_return_type_deduction >= 201304L) /* v3.4 */ || \
|
|
__has_feature(cxx_return_type_deduction) /* v3.4 *//* || \
|
|
(Z_COMPILER_VERSION == Z_VERSION(3,3,0) && __cplusplus >= 201305L)*/
|
|
|
|
# define Z_COMPILER_HAS_CPP14_RETURN_TYPE_DEDUCTION_FOR_NORMAL_FUNCTION 1 /* v3.3 (T?), v3.4 (N-S-T) */
|
|
# endif
|
|
|
|
/*---------------------------------------------------------------------.
|
|
| IMPORTANT: In v3.7 and later, sized deallocation is only enabled if |
|
|
| the user passes the -fsized-deallocation flag. The user must supply |
|
|
| definitions of the sized deallocation functions, either by providing |
|
|
| them explicitly or by using a C++ standard library that does. |
|
|
'=====================================================================*/
|
|
# if defined(__cpp_sized_deallocation) && __cpp_sized_deallocation >= 201309L /* v3.6 */
|
|
# define Z_COMPILER_HAS_CPP14_SIZED_DEALLOCATION 1 /* v3.4 (N-S) *//* TODO: Test. */
|
|
# endif
|
|
|
|
/*----------------------------------------------------------------------.
|
|
| BUG: Variable templates may produce warnings between v3.4 and v3.4.2. |
|
|
| e.g.: <https://bugs.llvm.org/show_bug.cgi?id=19558> |
|
|
'======================================================================*/
|
|
# if Z_COMPILER_VERSION >= Z_VERSION(3,5,0) && \
|
|
((defined(__cpp_variable_templates) && __cpp_variable_templates >= 201304L) /* v3.4 */ || \
|
|
__has_feature(cxx_variable_templates)) /* v3.4 */
|
|
|
|
# define Z_COMPILER_HAS_CPP14_VARIABLE_TEMPLATE 1 /* v3.4 (N-S-Tw), v3.5 (T!) */
|
|
# endif
|
|
|
|
/*----------------------------------------------------------------------------.
|
|
| BUG: Since v3.6, __has_cpp_attribute(deprecated) is >= 201309L in C++11 and |
|
|
| later, but starting from v3.7 [[deprecated]] generates warnings in C++11. |
|
|
| [[deprecated]] compiles without warnings in C++11 between v3.4 and v3.6.2. |
|
|
'============================================================================*/
|
|
# if (Z_z_HAS_CPP_ATTRIBUTE(deprecated) >= 201309L /* v3.6 */ && __cplusplus >= 201402L) || \
|
|
(Z_COMPILER_VERSION >= Z_VERSION(3,4,0) && \
|
|
Z_COMPILER_VERSION <= Z_VERSION(3,6,2) && \
|
|
__cplusplus >= 201103L)
|
|
|
|
# define Z_COMPILER_HAS_CPP14_ATTRIBUTE_DEPRECATED 1 /* v3.4 (N-S-T) */
|
|
# endif
|
|
|
|
# if (defined(__cpp_binary_literals) && __cpp_binary_literals >= 201304L) /* v3.4 */ || \
|
|
__has_feature(cxx_binary_literals) /* v3.3 */
|
|
|
|
# define Z_COMPILER_HAS_CPP14_LITERAL_BINARY_INTEGRAL 1 /* v2.9 (S), v3.3 (N-T!) */
|
|
# endif
|
|
|
|
# if (defined(__cpp_decltype_auto) && __cpp_decltype_auto >= 201304L) /* v3.4 */ || \
|
|
__has_feature(cxx_decltype_auto) /* v3.5 */ || \
|
|
(Z_COMPILER_VERSION == Z_VERSION(3,3,0) && __cplusplus >= 201305L)
|
|
|
|
# define Z_COMPILER_HAS_CPP14_SPECIFIER_CASE_DECLTYPE_AUTO 1 /* v3.3 (N-S-T) */
|
|
# endif
|
|
|
|
/* MARK: - Language: C++17 */
|
|
|
|
# if __cplusplus >= 201103L
|
|
# if Z_COMPILER_VERSION >= Z_VERSION(3,8,0)
|
|
# define Z_COMPILER_HAS_CPP17_AUTO_DEDUCTION_FROM_LIST_INITIALIZATION 1 /* v3.8 (S-T) */
|
|
# endif
|
|
|
|
# if __cplusplus >= 201406L
|
|
# if Z_COMPILER_VERSION >= Z_VERSION(3,5,0)
|
|
# define Z_COMPILER_HAS_CPP17_TYPENAME_IN_TEMPLATE_TEMPLATE_PARAMETER 1 /* v3.5 (N-S-T) */
|
|
|
|
# if Z_COMPILER_VERSION >= Z_VERSION(3,6,0)
|
|
# define Z_COMPILER_HAS_CPP17_LITERAL_UTF8_CHARACTER 1 /* v3.6 (N-S-T) */
|
|
|
|
# if Z_COMPILER_VERSION >= Z_VERSION(3,9,0)
|
|
# define Z_COMPILER_HAS_CPP17_ATTRIBUTE_USING_PREFIX 1 /* v3.9 (S-T) */
|
|
# define Z_COMPILER_HAS_CPP17_DIRECT_LIST_INITIALIZATION_FOR_FIXED_ENUMERATION 1 /* v3.9 (N-S-T) */
|
|
|
|
/*-----------------------------------------------------------------.
|
|
| NOTE: In v3.9 and v3.9.1, selection statements with initializer |
|
|
| do not seem to generate warnings in any version of C++. However, |
|
|
| Z only recognizes these features in C++17 and later. |
|
|
'=================================================================*/
|
|
# define Z_COMPILER_HAS_CPP17_IF_WITH_INITIALIZER 1 /* v3.9 (S-T) */
|
|
# define Z_COMPILER_HAS_CPP17_SWITCH_WITH_INITIALIZER 1 /* v3.9 (S-T) */
|
|
|
|
# if Z_COMPILER_VERSION >= Z_VERSION(4,0,0)
|
|
# define Z_COMPILER_HAS_CPP17_EXPRESSION_EVALUATION_ORDER 1 /* v4.0 (S) *//* TODO: Test. */
|
|
# define Z_COMPILER_HAS_CPP17_REMOVAL_OF_DYNAMIC_EXCEPTION_SPECIFICATION 1 /* v4.0 (S-T) */
|
|
# endif
|
|
# endif
|
|
# endif
|
|
# endif
|
|
|
|
# if Z_z_HAS_CPP_ATTRIBUTE(fallthrough) >= 201603L /* v3.9 */
|
|
# define Z_COMPILER_HAS_CPP17_ATTRIBUTE_FALLTHROUGH 1 /* v3.9 (N-S-T) */
|
|
# endif
|
|
|
|
# if Z_z_HAS_CPP_ATTRIBUTE(maybe_unused) >= 201603L /* v3.9 */
|
|
# define Z_COMPILER_HAS_CPP17_ATTRIBUTE_MAYBE_UNUSED 1 /* v3.9 (N-S-T) */
|
|
# endif
|
|
|
|
# if Z_z_HAS_CPP_ATTRIBUTE(nodiscard) >= 201603L /* v3.9 */
|
|
# define Z_COMPILER_HAS_CPP17_ATTRIBUTE_NODISCARD 1 /* v3.9 (N-S-T) */
|
|
# endif
|
|
# endif
|
|
# endif
|
|
|
|
# if (defined(__cpp_aggregate_bases) && __cpp_aggregate_bases >= 201603L) /* v4.0 */ || \
|
|
(Z_COMPILER_VERSION >= Z_VERSION(3,9,0) && \
|
|
Z_COMPILER_VERSION < Z_VERSION(4,0,0) && \
|
|
__cplusplus >= 201406L)
|
|
|
|
# define Z_COMPILER_HAS_CPP17_AGGREGATE_INITIALIZATION_FOR_DERIVED_CLASS 1 /* v3.9 (N-S-T) */
|
|
# endif
|
|
|
|
/*---------------------------------------------------------------.
|
|
| NOTE: Attributes for enumerators and namespaces do not seem to |
|
|
| generate warnings in C++11 and C++14 between v3.6 and v5.0.2. |
|
|
| However, Z only recognizes these features in C++17 and later. |
|
|
'===============================================================*/
|
|
# if (defined(__cpp_enumerator_attributes) && __cpp_enumerator_attributes >= 201411L) /* v4.0 */ || \
|
|
(Z_COMPILER_VERSION >= Z_VERSION(3,6,0) && \
|
|
Z_COMPILER_VERSION < Z_VERSION(4,0,0) && \
|
|
__cplusplus >= 201406L)
|
|
|
|
# define Z_COMPILER_HAS_CPP17_ATTRIBUTES_FOR_ENUMERATOR 1 /* v3.6 (N-S-T) */
|
|
# endif
|
|
|
|
# if (defined(__cpp_namespace_attributes) && __cpp_namespace_attributes >= 201411L) /* v4.0 */ || \
|
|
(Z_COMPILER_VERSION >= Z_VERSION(3,6,0) && \
|
|
Z_COMPILER_VERSION < Z_VERSION(4,0,0) && \
|
|
__cplusplus >= 201406L)
|
|
|
|
# define Z_COMPILER_HAS_CPP17_ATTRIBUTES_FOR_NAMESPACE 1 /* v3.6 (N-S-T) */
|
|
# endif
|
|
|
|
# if (defined(__cpp_if_constexpr) && __cpp_if_constexpr >= 201606L) /* v4.0 */ || \
|
|
(Z_COMPILER_VERSION >= Z_VERSION(3,9,0) && \
|
|
Z_COMPILER_VERSION < Z_VERSION(4,0,0) && \
|
|
__cplusplus >= 201406L)
|
|
|
|
# define Z_COMPILER_HAS_CPP17_CONSTEXPR_IF 1 /* v3.9 (S-T) */
|
|
# endif
|
|
|
|
# if defined(__cpp_constexpr) && __cpp_constexpr >= 201603L /* v5.0 */
|
|
# define Z_COMPILER_HAS_CPP17_CONSTEXPR_LAMBDA 1 /* v5.0 (S-T) */
|
|
# endif
|
|
|
|
# if defined(__cpp_deduction_guides) && __cpp_deduction_guides >= 201703L /* TODO: Investigate macro value. */
|
|
# define Z_COMPILER_HAS_CPP17_DEDUCTION_GUIDES_FOR_CLASS_TEMPLATE 1 /* TODO: Investigate acceptable version. */
|
|
# endif
|
|
|
|
# if (defined(__cpp_range_based_for) && __cpp_range_based_for >= 201603L) /* v4.0 */ || \
|
|
(Z_COMPILER_VERSION >= Z_VERSION(3,9,0) && \
|
|
Z_COMPILER_VERSION < Z_VERSION(4,0,0) && \
|
|
__cplusplus >= 201406L)
|
|
|
|
# define Z_COMPILER_HAS_CPP17_DIFFERING_BEGIN_AND_END_TYPES_IN_RANGE_BASED_FOR 1 /* v3.9 (N-S-T) */
|
|
# endif
|
|
|
|
# if defined(__cpp_fold_expressions) && __cpp_fold_expressions >= 201411L /* v4.0 */
|
|
# define Z_COMPILER_HAS_CPP17_FOLD_EXPRESSION 1 /* v3.6 (N-S) */
|
|
|
|
# if __cpp_fold_expressions >= 201603L /* v4.0 */
|
|
# define Z_COMPILER_HAS_CPP17_SAFE_UNARY_FOLD_EXPRESSION 1 /* v3.9 (N-S) */
|
|
# endif
|
|
# endif
|
|
|
|
# if (defined(__cpp_guaranteed_copy_elision) && __cpp_guaranteed_copy_elision >= 201606L) /* v7.0 */ || \
|
|
(Z_COMPILER_VERSION >= Z_VERSION(4,0,0) && \
|
|
Z_COMPILER_VERSION < Z_VERSION(7,0,0) && \
|
|
__cplusplus >= 201406L)
|
|
|
|
# define Z_COMPILER_HAS_CPP17_GUARANTEED_COPY_ELISION 1 /* v4.0 (S) *//* TODO: Test. */
|
|
# endif
|
|
|
|
# if (defined(__cpp_inheriting_constructors) && __cpp_inheriting_constructors >= 201511L) /* v4.0 */ || \
|
|
(Z_COMPILER_VERSION >= Z_VERSION(3,9,0) && \
|
|
Z_COMPILER_VERSION < Z_VERSION(4,0,0) && \
|
|
__cplusplus >= 201103L)
|
|
|
|
# define Z_COMPILER_HAS_CPP17_INHERITING_CONSTRUCTORS 1 /* v3.9 (S-T) */
|
|
# endif
|
|
|
|
# if (defined(__cpp_inline_variables) && __cpp_inline_variables >= 201606L) /* v4.0 */ || \
|
|
(Z_COMPILER_VERSION >= Z_VERSION(3,9,0) && \
|
|
Z_COMPILER_VERSION < Z_VERSION(4,0,0) && \
|
|
__cplusplus >= 201406L)
|
|
|
|
# define Z_COMPILER_HAS_CPP17_INLINE_VARIABLE 1 /* v3.9 (S-T) */
|
|
# endif
|
|
|
|
# if (defined(__cpp_capture_star_this) && __cpp_capture_star_this >= 201603L) /* v4.0 */ || \
|
|
(Z_COMPILER_VERSION >= Z_VERSION(3,9,0) && \
|
|
Z_COMPILER_VERSION < Z_VERSION(4,0,0) && \
|
|
__cplusplus >= 201406L)
|
|
|
|
# define Z_COMPILER_HAS_CPP17_LAMBDA_CAPTURE_OF_STAR_THIS_BY_VALUE 1 /* v3.9 (N-S-T) */
|
|
# endif
|
|
|
|
# if (defined(__cpp_nested_namespace_definitions) && __cpp_nested_namespace_definitions >= 201411L) /* v4.0 */ || \
|
|
(Z_COMPILER_VERSION >= Z_VERSION(3,6,0) && \
|
|
Z_COMPILER_VERSION < Z_VERSION(4,0,0) && \
|
|
__cplusplus >= 201406L)
|
|
|
|
# define Z_COMPILER_HAS_CPP17_NESTED_NAMESPACE_DEFINITION 1 /* v3.6 (N-S-T) */
|
|
# endif
|
|
|
|
# if defined(__cpp_noexcept_function_type) && __cpp_noexcept_function_type >= 201510L /* v4.0 */
|
|
# define Z_COMPILER_HAS_CPP17_NOEXCEPT_AS_PART_OF_THE_FUNCTION_TYPE 1 /* v4.0 (S-T) */
|
|
# endif
|
|
|
|
/*------------------------------------------------------------------.
|
|
| NOTE: According to Clang's documentation, constant evaluation for |
|
|
| all non-type template arguments was added in v3.6, but tests show |
|
|
| that non-generic lambdas with no lambda-capture (i.e. convertible |
|
|
| to pointer to function with external linkage) were not accepted |
|
|
| as non-type template arguments until v4.0. |
|
|
'==================================================================*/
|
|
# if defined(__cpp_nontype_template_args) && __cpp_nontype_template_args >= 201411L /* v4.0 */
|
|
# define Z_COMPILER_HAS_CPP17_NON_TYPE_TEMPLATE_ARGUMENTS 1 /* v3.6 (N-S), v4.0 (T) */
|
|
# endif
|
|
|
|
# if (defined(__cpp_nontype_template_parameter_auto) && __cpp_nontype_template_parameter_auto >= 201606L) /* v7.0 */ || \
|
|
(defined(__cpp_template_auto ) && __cpp_template_auto >= 201606L) /* v4.0 */
|
|
|
|
# define Z_COMPILER_HAS_CPP17_NON_TYPE_TEMPLATE_PARAMETER_WITH_AUTO_TYPE 1 /* v4.0 (S-T) */
|
|
# endif
|
|
|
|
# if defined(__cpp_aligned_new) && __cpp_aligned_new >= 201606L /* v4.0 */
|
|
# define Z_COMPILER_HAS_CPP17_OVER_ALIGNED_DYNAMIC_MEMORY_ALLOCATION 1 /* v4.0 (S) *//* TODO: Test. */
|
|
# endif
|
|
|
|
# define Z_COMPILER_HAS_CPP17_REMOVAL_OF_BOOL_INCREMENT 1 /* v3.8 (S-Tr) */
|
|
|
|
# ifndef Z_COMPILER_HAS_C_STORAGE_CLASS_REGISTER
|
|
# define Z_COMPILER_HAS_CPP17_REMOVAL_OF_REGISTER_AS_STORAGE_CLASS 1 /* v3.8 (S-Tr) */
|
|
# endif
|
|
|
|
# ifndef Z_COMPILER_HAS_C89_TRIGRAPHS
|
|
# define Z_COMPILER_HAS_CPP17_REMOVAL_OF_TRIGRAPHS 1 /* v3.5 (N-S-Tr) */
|
|
# endif
|
|
|
|
# if (defined(__cpp_static_assert) && __cpp_static_assert >= 201411L) /* v4.0 */ || \
|
|
(Z_COMPILER_VERSION >= Z_VERSION(3,5,0) && \
|
|
Z_COMPILER_VERSION < Z_VERSION(4,0,0) && \
|
|
__cplusplus >= 201406L)
|
|
|
|
# define Z_COMPILER_HAS_CPP17_STATIC_ASSERTION_WITH_NO_MESSAGE 1 /* v3.5 (N-S-T) */
|
|
# endif
|
|
|
|
# if defined(__cpp_structured_bindings) && __cpp_structured_bindings >= 201606L /* v4.0 */
|
|
# define Z_COMPILER_HAS_CPP17_STRUCTURED_BINDING 1 /* v4.0 (S) */
|
|
# endif
|
|
|
|
# if defined(__cpp_template_template_args) && __cpp_template_template_args >= 201611L /* v7.0 */
|
|
# define Z_COMPILER_HAS_CPP17_TEMPLATE_TEMPLATE_ARGUMENT_MATCHING 1
|
|
# endif
|
|
|
|
# if defined(__cpp_variadic_using) && __cpp_variadic_using >= 201611L /* v4.0 */
|
|
# define Z_COMPILER_HAS_CPP17_VARIADIC_USING 1 /* v4.0 (S-T) */
|
|
# endif
|
|
|
|
# ifdef Z_COMPILER_HAS_C99_LITERAL_HEXADECIMAL_FLOATING_POINT
|
|
# define Z_COMPILER_HAS_CPP17_LITERAL_HEXADECIMAL_FLOATING_POINT 1 /* v3.9 (T!) */
|
|
# endif
|
|
|
|
# ifdef Z_COMPILER_HAS_CLANG_C_PREPROCESSOR_OPERATOR_HAS_INCLUDE
|
|
# define Z_COMPILER_HAS_CPP17_PREPROCESSOR_OPERATOR_HAS_INCLUDE 1 /* v2.7 */
|
|
# endif
|
|
|
|
/*# define Z_COMPILER_HAS_CPP17_IGNORING_OF_UNKNOWN_ATTRIBUTES*/ /* Always generate warnings. */
|
|
|
|
#endif
|
|
|
|
/* MARK: - Language: Implementation-defined */
|
|
|
|
#if (~0 >> 1) == ~0
|
|
# define Z_COMPILER_HAS_ARITHMETIC_RIGHT_SHIFT 1
|
|
#endif
|
|
|
|
/* MARK: - Non-standard language: Attributes */
|
|
|
|
#if __has_attribute(alias)
|
|
# define Z_COMPILER_ATTRIBUTE_ALIAS(name) __attribute__((alias(name))) /* v2.6 */
|
|
#endif
|
|
|
|
#if __has_attribute(dllexport)
|
|
# define Z_COMPILER_ATTRIBUTE_API_EXPORT __declspec(dllexport) /* v2.6 */
|
|
#endif
|
|
|
|
#if __has_attribute(dllimport)
|
|
# define Z_COMPILER_ATTRIBUTE_API_IMPORT __declspec(dllimport) /* v2.6 */
|
|
#endif
|
|
|
|
#if __has_attribute(stdcall)
|
|
# define Z_COMPILER_ATTRIBUTE_MICROSOFT_STD_CALL __attribute__((stdcall)) /* TODO */
|
|
#endif
|
|
|
|
#if __has_attribute(always_inline)
|
|
# define Z_COMPILER_ATTRIBUTE_ALWAYS_INLINE __inline__ __attribute__((always_inline)) /* v2.6 */
|
|
# define Z_COMPILER_ATTRIBUTE_INLINE __inline__ __attribute__((always_inline)) /* v2.6 */
|
|
#else
|
|
# define Z_COMPILER_ATTRIBUTE_INLINE __inline__ /* v2.6 */
|
|
#endif
|
|
|
|
#if __has_attribute(noreturn)
|
|
# define Z_COMPILER_ATTRIBUTE_NO_RETURN __attribute__((noreturn)) /* v2.6 */
|
|
#endif
|
|
|
|
#if __has_attribute(sentinel)
|
|
# define Z_COMPILER_ATTRIBUTE_NULL_TERMINATED __attribute__((sentinel)) /* v2.6 */
|
|
#endif
|
|
|
|
#if __has_attribute(visibility)
|
|
# define Z_COMPILER_ATTRIBUTE_PRIVATE __attribute__((visibility("hidden"))) /* v2.6 */
|
|
# define Z_COMPILER_ATTRIBUTE_PUBLIC __attribute__((visibility("default"))) /* v2.6 */
|
|
#endif
|
|
|
|
#if __has_extension(tls)
|
|
# define Z_COMPILER_ATTRIBUTE_THREAD_LOCAL __thread /* v2.6 */
|
|
#endif
|
|
|
|
#if __has_attribute(weak)
|
|
# define Z_COMPILER_ATTRIBUTE_WEAK __attribute__((weak)) /* v2.6 */
|
|
#endif
|
|
|
|
/*#define Z_COMPILER_ATTRIBUTE_EBCO*/
|
|
/*#define Z_COMPILER_ATTRIBUTE_API_WEAK_EXPORT*/
|
|
|
|
/* MARK: - Non-standard language: Structure padding */
|
|
|
|
#if __has_attribute(packed) /* v2.6 */
|
|
# define Z_COMPILER_PACKED_NAMED_STRUCTURE_BEFORE_TYPE __attribute__((packed))
|
|
# define Z_COMPILER_PACKED_NAMED_UNION_BEFORE_TYPE __attribute__((packed))
|
|
# define Z_COMPILER_PACKED_STRUCTURE_AFTER_BODY __attribute__((packed))
|
|
# define Z_COMPILER_PACKED_UNION_AFTER_BODY __attribute__((packed))
|
|
#endif
|
|
|
|
/*#define Z_COMPILER_PACKED_NAMED_STRUCTURE_BEFORE_STRUCT*/
|
|
/*#define Z_COMPILER_PACKED_NAMED_STRUCTURE_BEFORE_BODY*/
|
|
/*#define Z_COMPILER_PACKED_NAMED_STRUCTURE_AFTER_BODY*/
|
|
/*#define Z_COMPILER_PACKED_NAMED_UNION_BEFORE_UNION*/
|
|
/*#define Z_COMPILER_PACKED_NAMED_UNION_BEFORE_BODY*/
|
|
/*#define Z_COMPILER_PACKED_NAMED_UNION_AFTER_BODY*/
|
|
/*#define Z_COMPILER_PACKED_STRUCTURE_BEFORE_STRUCT*/
|
|
/*#define Z_COMPILER_PACKED_STRUCTURE_BEFORE_BODY*/
|
|
/*#define Z_COMPILER_PACKED_UNION_BEFORE_UNION*/
|
|
/*#define Z_COMPILER_PACKED_UNION_BEFORE_BODY*/
|
|
|
|
/* MARK: - Built-ins: Types and literal suffixes */
|
|
|
|
#ifdef __UINT8_TYPE__
|
|
# define Z_COMPILER_TYPE_UINT8 __typeof(__extension__ (__UINT8_TYPE__)1)
|
|
#endif
|
|
|
|
#ifdef __INT8_TYPE__ /* v2.6 */
|
|
# define Z_COMPILER_TYPE_SINT8 __typeof(__extension__ (__INT8_TYPE__)1)
|
|
|
|
# ifndef __UINT8_TYPE__
|
|
# define Z_COMPILER_TYPE_UINT8 __typeof(__extension__ (unsigned __INT8_TYPE__)1)
|
|
# endif
|
|
#endif
|
|
|
|
#ifdef __UINT16_TYPE__
|
|
# define Z_COMPILER_TYPE_UINT16 __typeof(__extension__ (__UINT16_TYPE__)1)
|
|
#endif
|
|
|
|
#ifdef __INT16_TYPE__ /* v2.6 */
|
|
# define Z_COMPILER_TYPE_SINT16 __typeof(__extension__ (__INT16_TYPE__)1)
|
|
|
|
# ifndef __UINT16_TYPE__
|
|
# define Z_COMPILER_TYPE_UINT16 __typeof(__extension__ (unsigned __INT16_TYPE__)1)
|
|
# endif
|
|
#endif
|
|
|
|
#ifdef __UINT32_TYPE__
|
|
# define Z_COMPILER_TYPE_UINT32 __typeof(__extension__ (__UINT32_TYPE__)1)
|
|
#endif
|
|
|
|
#ifdef __INT32_TYPE__ /* v2.6 */
|
|
# define Z_COMPILER_TYPE_SINT32 __typeof(__extension__ (__INT32_TYPE__)1)
|
|
|
|
# ifndef __UINT32_TYPE__
|
|
# define Z_COMPILER_TYPE_UINT32 __typeof(__extension__ (unsigned __INT32_TYPE__)1)
|
|
# endif
|
|
#endif
|
|
|
|
#ifdef __UINT64_TYPE__
|
|
# define Z_COMPILER_TYPE_UINT64 __typeof(__extension__ (__UINT64_TYPE__)1)
|
|
#endif
|
|
|
|
#ifdef __INT64_TYPE__ /* v2.6 */
|
|
# define Z_COMPILER_TYPE_SINT64 __typeof(__extension__ (__INT64_TYPE__)1)
|
|
|
|
# ifndef __UINT64_TYPE__
|
|
# define Z_COMPILER_TYPE_UINT64 __typeof(__extension__ (unsigned __INT64_TYPE__)1)
|
|
# endif
|
|
#endif
|
|
|
|
#ifdef __SIZEOF_INT128__ /* v3.3 */
|
|
# define Z_COMPILER_TYPE_UINT128 __uint128_t /* v2.6 */
|
|
# define Z_COMPILER_TYPE_SINT128 __int128_t /* v2.6 */
|
|
#endif
|
|
|
|
#define Z_COMPILER_TYPE_VAL __builtin_va_list /* v2.6 */
|
|
|
|
/*#define Z_COMPILER_TYPE_UINT24*/
|
|
/*#define Z_COMPILER_TYPE_SINT24*/
|
|
/*#define Z_COMPILER_TYPE_UINT40*/
|
|
/*#define Z_COMPILER_TYPE_SINT40*/
|
|
/*#define Z_COMPILER_TYPE_UINT48*/
|
|
/*#define Z_COMPILER_TYPE_SINT48*/
|
|
/*#define Z_COMPILER_TYPE_UINT56*/
|
|
/*#define Z_COMPILER_TYPE_SINT56*/
|
|
/*#define Z_COMPILER_TYPE_BFP16*/
|
|
/*#define Z_COMPILER_TYPE_BFP32*/
|
|
/*#define Z_COMPILER_TYPE_BFP64*/
|
|
/*#define Z_COMPILER_TYPE_BFP128*/
|
|
/*#define Z_COMPILER_TYPE_DFP32*/
|
|
/*#define Z_COMPILER_TYPE_DFP64*/
|
|
/*#define Z_COMPILER_TYPE_DFP128*/
|
|
/*#define Z_COMPILER_TYPE_X87_DE80*/
|
|
/*#define Z_COMPILER_TYPE_X87_DE96*/
|
|
/*#define Z_COMPILER_TYPE_X87_DE128*/
|
|
/*#define Z_COMPILER_TYPE_IBM_ED*/
|
|
/*#define Z_COMPILER_TYPE_BFLOAT16*/
|
|
/*#define Z_COMPILER_LITERAL_UINT8(number)*/
|
|
/*#define Z_COMPILER_LITERAL_SINT8(number)*/
|
|
/*#define Z_COMPILER_LITERAL_UINT16(number)*/
|
|
/*#define Z_COMPILER_LITERAL_SINT16(number)*/
|
|
/*#define Z_COMPILER_LITERAL_UINT24(number)*/
|
|
/*#define Z_COMPILER_LITERAL_SINT24(number)*/
|
|
/*#define Z_COMPILER_LITERAL_UINT32(number)*/
|
|
/*#define Z_COMPILER_LITERAL_SINT32(number)*/
|
|
/*#define Z_COMPILER_LITERAL_UINT40(number)*/
|
|
/*#define Z_COMPILER_LITERAL_SINT40(number)*/
|
|
/*#define Z_COMPILER_LITERAL_UINT48(number)*/
|
|
/*#define Z_COMPILER_LITERAL_SINT48(number)*/
|
|
/*#define Z_COMPILER_LITERAL_UINT56(number)*/
|
|
/*#define Z_COMPILER_LITERAL_SINT56(number)*/
|
|
/*#define Z_COMPILER_LITERAL_UINT64(number)*/
|
|
/*#define Z_COMPILER_LITERAL_SINT64(number)*/
|
|
/*#define Z_COMPILER_LITERAL_UINT128(number)*/
|
|
/*#define Z_COMPILER_LITERAL_SINT128(number)*/
|
|
/*#define Z_COMPILER_LITERAL_BFP16(number)*/
|
|
/*#define Z_COMPILER_LITERAL_BFP32(number)*/
|
|
/*#define Z_COMPILER_LITERAL_BFP64(number)*/
|
|
/*#define Z_COMPILER_LITERAL_BFP128(number)*/
|
|
/*#define Z_COMPILER_LITERAL_DFP32(number)*/
|
|
/*#define Z_COMPILER_LITERAL_DFP64(number)*/
|
|
/*#define Z_COMPILER_LITERAL_DFP128(number)*/
|
|
/*#define Z_COMPILER_LITERAL_X87_DE80(number)*/
|
|
/*#define Z_COMPILER_LITERAL_X87_DE96(number)*/
|
|
/*#define Z_COMPILER_LITERAL_X87_DE128(number)*/
|
|
/*#define Z_COMPILER_LITERAL_IBM_ED(number)*/
|
|
/*#define Z_COMPILER_LITERAL_BFLOAT16(number)*/
|
|
|
|
/* TODO */
|
|
/*#ifdef __FLOAT128__*/ /* v3.9 */
|
|
/*# define Z_COMPILER_TYPE_FLOAT128 __float128*/ /* v3.9 */
|
|
/*#endif*/
|
|
|
|
/*#ifdef __ARM_FP16_FORMAT_IEEE
|
|
#endif*/
|
|
|
|
/* MARK: - Built-ins: Constants */
|
|
|
|
#ifdef __CHAR_BIT__ /* v2.6 */
|
|
# define Z_COMPILER_CONSTANT_CHAR_WIDTH __CHAR_BIT__
|
|
#endif
|
|
|
|
#ifdef __SCHAR_MAX__ /* v2.6 */
|
|
# define Z_COMPILER_CONSTANT_SCHAR_MAXIMUM __SCHAR_MAX__
|
|
#endif
|
|
|
|
#if defined(__SIZEOF_SHORT__) /* v2.8 */
|
|
# define Z_COMPILER_CONSTANT_SHORT_SIZE __SIZEOF_SHORT__
|
|
#elif defined(_EM_SSIZE) /* v2.8 */
|
|
# define Z_COMPILER_CONSTANT_SHORT_SIZE _EM_SSIZE
|
|
#endif
|
|
|
|
#ifdef __SHRT_MAX__ /* v2.6 */
|
|
# define Z_COMPILER_CONSTANT_SSHORT_MAXIMUM __SHRT_MAX__
|
|
#endif
|
|
|
|
#if defined(__SIZEOF_INT__) /* v2.8 */
|
|
# define Z_COMPILER_CONSTANT_INT_SIZE __SIZEOF_INT__
|
|
#elif defined(_EM_WSIZE) /* v2.8 */
|
|
# define Z_COMPILER_CONSTANT_INT_SIZE _EM_WSIZE
|
|
#endif
|
|
|
|
#ifdef _MIPS_SZINT /* v3.1 */
|
|
# define Z_COMPILER_CONSTANT_INT_WIDTH _MIPS_SZINT
|
|
#endif
|
|
|
|
#ifdef __INT_MAX__ /* v2.6 */
|
|
# define Z_COMPILER_CONSTANT_SINT_MAXIMUM __INT_MAX__
|
|
#endif
|
|
|
|
#if defined(__SIZEOF_LONG__) /* v2.8 */
|
|
# define Z_COMPILER_CONSTANT_LONG_SIZE __SIZEOF_LONG__
|
|
#elif defined(_EM_LSIZE) /* v2.8 */
|
|
# define Z_COMPILER_CONSTANT_LONG_SIZE _EM_LSIZE
|
|
#endif
|
|
|
|
#ifdef _MIPS_SZLONG /* v3.1 */
|
|
# define Z_COMPILER_CONSTANT_LONG_WIDTH _MIPS_SZLONG
|
|
#endif
|
|
|
|
#ifdef __LONG_MAX__ /* v2.6 */
|
|
# define Z_COMPILER_CONSTANT_SLONG_MAXIMUM __LONG_MAX__
|
|
#endif
|
|
|
|
#ifdef __SIZEOF_LONG_LONG__ /* v2.8 */
|
|
# define Z_COMPILER_CONSTANT_LLONG_SIZE __SIZEOF_LONG_LONG__
|
|
#endif
|
|
|
|
#ifdef __LONG_LONG_MAX__ /* v2.6 */
|
|
# define Z_COMPILER_CONSTANT_SLLONG_MAXIMUM __LONG_LONG_MAX__
|
|
#endif
|
|
|
|
#ifdef __BOOL_WIDTH__
|
|
# define Z_COMPILER_CONSTANT_BOOL_WIDTH __BOOL_WIDTH__
|
|
#endif
|
|
|
|
#ifdef __SIZEOF_WCHAR_T__ /* v2.8 */
|
|
# define Z_COMPILER_CONSTANT_WCHAR_SIZE __SIZEOF_WCHAR_T__
|
|
#endif
|
|
|
|
#ifdef __WCHAR_WIDTH__ /* v2.7 */
|
|
# define Z_COMPILER_CONSTANT_WCHAR_WIDTH __WCHAR_WIDTH__
|
|
#endif
|
|
|
|
#ifdef __WCHAR_MAX__ /* v2.6 */
|
|
# define Z_COMPILER_CONSTANT_WCHAR_MAXIMUM __WCHAR_MAX__
|
|
#endif
|
|
|
|
#ifdef __SIZEOF_SIZE_T__ /* v2.8 */
|
|
# define Z_COMPILER_CONSTANT_SIZE_SIZE __SIZEOF_SIZE_T__
|
|
#endif
|
|
|
|
#ifdef __SIZE_WIDTH__ /* v2.7 */
|
|
# define Z_COMPILER_CONSTANT_SIZE_WIDTH __SIZE_WIDTH__
|
|
#endif
|
|
|
|
#ifdef __SIZE_MAX__ /* v3.3 */
|
|
# define Z_COMPILER_CONSTANT_USIZE_MAXIMUM __SIZE_MAX__
|
|
#endif
|
|
|
|
#ifdef __UINTMAX_WIDTH__ /* v3.5 */
|
|
# define Z_COMPILER_CONSTANT_UINTMAX_WIDTH __UINTMAX_WIDTH__
|
|
#endif
|
|
|
|
#ifdef __UINTMAX_MAX__ /* v3.5 */
|
|
# define Z_COMPILER_CONSTANT_UINTMAX_MAXIMUM __UINTMAX_MAX__
|
|
#endif
|
|
|
|
#ifdef __INTMAX_WIDTH__ /* v2.7 */
|
|
# define Z_COMPILER_CONSTANT_SINTMAX_WIDTH __INTMAX_WIDTH__
|
|
#endif
|
|
|
|
#ifdef __INTMAX_MAX__ /* v2.6 */
|
|
# define Z_COMPILER_CONSTANT_SINTMAX_MAXIMUM __INTMAX_MAX__
|
|
#endif
|
|
|
|
#ifdef __UINTPTR_WIDTH__ /* v3.5 */
|
|
# define Z_COMPILER_CONSTANT_UINTPTR_WIDTH __UINTPTR_WIDTH__
|
|
#endif
|
|
|
|
#ifdef __UINTPTR_MAX__ /* v3.5 */
|
|
# define Z_COMPILER_CONSTANT_UINTPTR_MAXIMUM __UINTPTR_MAX__
|
|
#endif
|
|
|
|
#ifdef __INTPTR_WIDTH__ /* v2.7 */
|
|
# define Z_COMPILER_CONSTANT_SINTPTR_WIDTH __INTPTR_WIDTH__
|
|
#endif
|
|
|
|
#ifdef __INTPTR_MAX__ /* v3.5 */
|
|
# define Z_COMPILER_CONSTANT_SINTPTR_MAXIMUM __INTPTR_MAX__
|
|
#endif
|
|
|
|
#if defined(__SIZEOF_FLOAT__) /* v2.8 */
|
|
# define Z_COMPILER_CONSTANT_FLOAT_SIZE __SIZEOF_FLOAT__
|
|
#elif defined(_EM_FSIZE) /* v2.8 */
|
|
# define Z_COMPILER_CONSTANT_FLOAT_SIZE _EM_FSIZE
|
|
#endif
|
|
|
|
#if __has_builtin(__builtin_huge_valf)
|
|
# define Z_COMPILER_CONSTANT_FLOAT_HUGE __builtin_huge_valf() /* v2.6 */
|
|
#endif
|
|
|
|
#if __has_builtin(__builtin_inff)
|
|
# define Z_COMPILER_CONSTANT_FLOAT_INFINITY __builtin_inff() /* v2.6 */
|
|
#endif
|
|
|
|
#if __has_builtin(__builtin_nanf)
|
|
# define Z_COMPILER_CONSTANT_FLOAT_QNAN __builtin_nanf("") /* v2.6 */
|
|
#endif
|
|
|
|
#if __has_builtin(__builtin_nansf)
|
|
# define Z_COMPILER_CONSTANT_FLOAT_SNAN __builtin_nansf("") /* v2.6 */
|
|
#endif
|
|
|
|
#if defined(__SIZEOF_DOUBLE__) /* v2.8 */
|
|
# define Z_COMPILER_CONSTANT_DOUBLE_SIZE __SIZEOF_DOUBLE__
|
|
#elif defined(_EM_DSIZE) /* v2.8 */
|
|
# define Z_COMPILER_CONSTANT_DOUBLE_SIZE _EM_DSIZE
|
|
#endif
|
|
|
|
#if __has_builtin(__builtin_huge_val)
|
|
# define Z_COMPILER_CONSTANT_DOUBLE_HUGE __builtin_huge_val() /* v2.6 */
|
|
#endif
|
|
|
|
#if __has_builtin(__builtin_inf)
|
|
# define Z_COMPILER_CONSTANT_DOUBLE_INFINITY __builtin_inf() /* v2.6 */
|
|
#endif
|
|
|
|
#if __has_builtin(__builtin_nan)
|
|
# define Z_COMPILER_CONSTANT_DOUBLE_QNAN __builtin_nan("") /* v2.6 */
|
|
#endif
|
|
|
|
#if __has_builtin(__builtin_nans)
|
|
# define Z_COMPILER_CONSTANT_DOUBLE_SNAN __builtin_nans("") /* v2.6 */
|
|
#endif
|
|
|
|
#ifdef __SIZEOF_LONG_DOUBLE__ /* v2.8 */
|
|
# define Z_COMPILER_CONSTANT_LDOUBLE_SIZE __SIZEOF_LONG_DOUBLE__
|
|
#endif
|
|
|
|
#if __has_builtin(__builtin_huge_vall)
|
|
# define Z_COMPILER_CONSTANT_LDOUBLE_HUGE __builtin_huge_vall() /* v2.6 */
|
|
#endif
|
|
|
|
#if __has_builtin(__builtin_infl)
|
|
# define Z_COMPILER_CONSTANT_LDOUBLE_INFINITY __builtin_infl() /* v2.6 */
|
|
#endif
|
|
|
|
#if __has_builtin(__builtin_nanl)
|
|
# define Z_COMPILER_CONSTANT_LDOUBLE_QNAN __builtin_nanl("") /* v2.6 */
|
|
#endif
|
|
|
|
#if __has_builtin(__builtin_nansl)
|
|
# define Z_COMPILER_CONSTANT_LDOUBLE_SNAN __builtin_nansl("") /* v2.6 */
|
|
#endif
|
|
|
|
#if defined(__SIZEOF_POINTER__) /* v2.8 */
|
|
# define Z_COMPILER_CONSTANT_POINTER_SIZE __SIZEOF_POINTER__
|
|
#elif defined(_EM_PSIZE) /* v2.8 */
|
|
# define Z_COMPILER_CONSTANT_POINTER_SIZE _EM_PSIZE
|
|
#endif
|
|
|
|
#if defined(__POINTER_WIDTH__) /* v2.6 */
|
|
# define Z_COMPILER_CONSTANT_POINTER_WIDTH __POINTER_WIDTH__
|
|
#elif defined(_MIPS_SZPTR) /* v3.1 */
|
|
# define Z_COMPILER_CONSTANT_POINTER_WIDTH _MIPS_SZPTR
|
|
#endif
|
|
|
|
/*#define Z_COMPILER_CONSTANT_UCHAR_MAXIMUM*/
|
|
/*#define Z_COMPILER_CONSTANT_SCHAR_MINIMUM*/
|
|
/*#define Z_COMPILER_CONSTANT_SHORT_WIDTH*/
|
|
/*#define Z_COMPILER_CONSTANT_USHORT_MAXIMUM*/
|
|
/*#define Z_COMPILER_CONSTANT_SSHORT_MINIMUM*/
|
|
/*#define Z_COMPILER_CONSTANT_UINT_MAXIMUM*/
|
|
/*#define Z_COMPILER_CONSTANT_SINT_MINIMUM*/
|
|
/*#define Z_COMPILER_CONSTANT_ULONG_MAXIMUM*/
|
|
/*#define Z_COMPILER_CONSTANT_SLONG_MINIMUM*/
|
|
/*#define Z_COMPILER_CONSTANT_LLONG_WIDTH*/
|
|
/*#define Z_COMPILER_CONSTANT_ULLONG_MAXIMUM*/
|
|
/*#define Z_COMPILER_CONSTANT_SLLONG_MINIMUM*/
|
|
/*#define Z_COMPILER_CONSTANT_BOOL_SIZE*/
|
|
/*#define Z_COMPILER_CONSTANT_WCHAR_MINIMUM*/
|
|
/*#define Z_COMPILER_CONSTANT_SSIZE_MAXIMUM*/
|
|
/*#define Z_COMPILER_CONSTANT_SSIZE_MINIMUM*/
|
|
/*#define Z_COMPILER_CONSTANT_UINTMAX_SIZE*/
|
|
/*#define Z_COMPILER_CONSTANT_SINTMAX_SIZE*/
|
|
/*#define Z_COMPILER_CONSTANT_SINTMAX_MINIMUM*/
|
|
/*#define Z_COMPILER_CONSTANT_UINTPTR_SIZE*/
|
|
/*#define Z_COMPILER_CONSTANT_SINTPTR_SIZE*/
|
|
/*#define Z_COMPILER_CONSTANT_SINTPTR_MINIMUM*/
|
|
/*#define Z_COMPILER_CONSTANT_FLOAT_WIDTH*/
|
|
/*#define Z_COMPILER_CONSTANT_DOUBLE_WIDTH*/
|
|
/*#define Z_COMPILER_CONSTANT_LDOUBLE_WIDTH*/
|
|
/*#define Z_COMPILER_CONSTANT_FLOAT16_HUGE*/
|
|
/*#define Z_COMPILER_CONSTANT_FLOAT16_INFINITY*/
|
|
/*#define Z_COMPILER_CONSTANT_FLOAT16_QNAN*/
|
|
/*#define Z_COMPILER_CONSTANT_FLOAT16_SNAN*/
|
|
/*#define Z_COMPILER_CONSTANT_FLOAT32_HUGE*/
|
|
/*#define Z_COMPILER_CONSTANT_FLOAT32_INFINITY*/
|
|
/*#define Z_COMPILER_CONSTANT_FLOAT32_QNAN*/
|
|
/*#define Z_COMPILER_CONSTANT_FLOAT32_SNAN*/
|
|
/*#define Z_COMPILER_CONSTANT_FLOAT64_HUGE*/
|
|
/*#define Z_COMPILER_CONSTANT_FLOAT64_INFINITY*/
|
|
/*#define Z_COMPILER_CONSTANT_FLOAT64_QNAN*/
|
|
/*#define Z_COMPILER_CONSTANT_FLOAT64_SNAN*/
|
|
/*#define Z_COMPILER_CONSTANT_FLOAT128_HUGE*/
|
|
/*#define Z_COMPILER_CONSTANT_FLOAT128_INFINITY*/
|
|
/*#define Z_COMPILER_CONSTANT_FLOAT128_QNAN*/
|
|
/*#define Z_COMPILER_CONSTANT_FLOAT128_SNAN*/
|
|
/*#define Z_COMPILER_CONSTANT_FLOAT32X_HUGE*/
|
|
/*#define Z_COMPILER_CONSTANT_FLOAT32X_INFINITY*/
|
|
/*#define Z_COMPILER_CONSTANT_FLOAT32X_QNAN*/
|
|
/*#define Z_COMPILER_CONSTANT_FLOAT32X_SNAN*/
|
|
/*#define Z_COMPILER_CONSTANT_FLOAT64X_HUGE*/
|
|
/*#define Z_COMPILER_CONSTANT_FLOAT64X_INFINITY*/
|
|
/*#define Z_COMPILER_CONSTANT_FLOAT64X_QNAN*/
|
|
/*#define Z_COMPILER_CONSTANT_FLOAT64X_SNAN*/
|
|
/*#define Z_COMPILER_CONSTANT_FLOAT128X_HUGE*/
|
|
/*#define Z_COMPILER_CONSTANT_FLOAT128X_INFINITY*/
|
|
/*#define Z_COMPILER_CONSTANT_FLOAT128X_QNAN*/
|
|
/*#define Z_COMPILER_CONSTANT_FLOAT128X_SNAN*/
|
|
/*#define Z_COMPILER_CONSTANT_DECIMAL32_HUGE*/
|
|
/*#define Z_COMPILER_CONSTANT_DECIMAL32_INFINITY*/
|
|
/*#define Z_COMPILER_CONSTANT_DECIMAL32_QNAN*/
|
|
/*#define Z_COMPILER_CONSTANT_DECIMAL32_SNAN*/
|
|
/*#define Z_COMPILER_CONSTANT_DECIMAL64_HUGE*/
|
|
/*#define Z_COMPILER_CONSTANT_DECIMAL64_INFINITY*/
|
|
/*#define Z_COMPILER_CONSTANT_DECIMAL64_QNAN*/
|
|
/*#define Z_COMPILER_CONSTANT_DECIMAL64_SNAN*/
|
|
/*#define Z_COMPILER_CONSTANT_DECIMAL128_HUGE*/
|
|
/*#define Z_COMPILER_CONSTANT_DECIMAL128_INFINITY*/
|
|
/*#define Z_COMPILER_CONSTANT_DECIMAL128_QNAN*/
|
|
/*#define Z_COMPILER_CONSTANT_DECIMAL128_SNAN*/
|
|
/*#define Z_COMPILER_CONSTANT_DECIMAL64X_HUGE*/
|
|
/*#define Z_COMPILER_CONSTANT_DECIMAL64X_INFINITY*/
|
|
/*#define Z_COMPILER_CONSTANT_DECIMAL64X_QNAN*/
|
|
/*#define Z_COMPILER_CONSTANT_DECIMAL64X_SNAN*/
|
|
/*#define Z_COMPILER_CONSTANT_DECIMAL128X_HUGE*/
|
|
/*#define Z_COMPILER_CONSTANT_DECIMAL128X_INFINITY*/
|
|
/*#define Z_COMPILER_CONSTANT_DECIMAL128X_QNAN*/
|
|
/*#define Z_COMPILER_CONSTANT_DECIMAL128X_SNAN*/
|
|
/*#define Z_COMPILER_CONSTANT_BFP16_HUGE*/
|
|
/*#define Z_COMPILER_CONSTANT_BFP16_INFINITY*/
|
|
/*#define Z_COMPILER_CONSTANT_BFP16_QNAN*/
|
|
/*#define Z_COMPILER_CONSTANT_BFP16_SNAN*/
|
|
/*#define Z_COMPILER_CONSTANT_BFP32_HUGE*/
|
|
/*#define Z_COMPILER_CONSTANT_BFP32_INFINITY*/
|
|
/*#define Z_COMPILER_CONSTANT_BFP32_QNAN*/
|
|
/*#define Z_COMPILER_CONSTANT_BFP32_SNAN*/
|
|
/*#define Z_COMPILER_CONSTANT_BFP64_HUGE*/
|
|
/*#define Z_COMPILER_CONSTANT_BFP64_INFINITY*/
|
|
/*#define Z_COMPILER_CONSTANT_BFP64_QNAN*/
|
|
/*#define Z_COMPILER_CONSTANT_BFP64_SNAN*/
|
|
/*#define Z_COMPILER_CONSTANT_BFP128_HUGE*/
|
|
/*#define Z_COMPILER_CONSTANT_BFP128_INFINITY*/
|
|
/*#define Z_COMPILER_CONSTANT_BFP128_QNAN*/
|
|
/*#define Z_COMPILER_CONSTANT_BFP128_SNAN*/
|
|
/*#define Z_COMPILER_CONSTANT_DFP32_HUGE*/
|
|
/*#define Z_COMPILER_CONSTANT_DFP32_INFINITY*/
|
|
/*#define Z_COMPILER_CONSTANT_DFP32_QNAN*/
|
|
/*#define Z_COMPILER_CONSTANT_DFP32_SNAN*/
|
|
/*#define Z_COMPILER_CONSTANT_DFP64_HUGE*/
|
|
/*#define Z_COMPILER_CONSTANT_DFP64_INFINITY*/
|
|
/*#define Z_COMPILER_CONSTANT_DFP64_QNAN*/
|
|
/*#define Z_COMPILER_CONSTANT_DFP64_SNAN*/
|
|
/*#define Z_COMPILER_CONSTANT_DFP128_HUGE*/
|
|
/*#define Z_COMPILER_CONSTANT_DFP128_INFINITY*/
|
|
/*#define Z_COMPILER_CONSTANT_DFP128_QNAN*/
|
|
/*#define Z_COMPILER_CONSTANT_DFP128_SNAN*/
|
|
/*#define Z_COMPILER_CONSTANT_X87_DE80_HUGE*/
|
|
/*#define Z_COMPILER_CONSTANT_X87_DE80_INFINITY*/
|
|
/*#define Z_COMPILER_CONSTANT_X87_DE80_QNAN*/
|
|
/*#define Z_COMPILER_CONSTANT_X87_DE80_SNAN*/
|
|
/*#define Z_COMPILER_CONSTANT_X87_DE96_HUGE*/
|
|
/*#define Z_COMPILER_CONSTANT_X87_DE96_INFINITY*/
|
|
/*#define Z_COMPILER_CONSTANT_X87_DE96_QNAN*/
|
|
/*#define Z_COMPILER_CONSTANT_X87_DE96_SNAN*/
|
|
/*#define Z_COMPILER_CONSTANT_X87_DE128_HUGE*/
|
|
/*#define Z_COMPILER_CONSTANT_X87_DE128_INFINITY*/
|
|
/*#define Z_COMPILER_CONSTANT_X87_DE128_QNAN*/
|
|
/*#define Z_COMPILER_CONSTANT_X87_DE128_SNAN*/
|
|
/*#define Z_COMPILER_CONSTANT_IBM_ED_HUGE*/
|
|
/*#define Z_COMPILER_CONSTANT_IBM_ED_INFINITY*/
|
|
/*#define Z_COMPILER_CONSTANT_IBM_ED_QNAN*/
|
|
/*#define Z_COMPILER_CONSTANT_IBM_ED_SNAN*/
|
|
/*#define Z_COMPILER_CONSTANT_BFLOAT16_HUGE*/
|
|
/*#define Z_COMPILER_CONSTANT_BFLOAT16_INFINITY*/
|
|
/*#define Z_COMPILER_CONSTANT_BFLOAT16_QNAN*/
|
|
/*#define Z_COMPILER_CONSTANT_BFLOAT16_SNAN*/
|
|
|
|
/* MARK: - Built-ins: Macros */
|
|
|
|
#if Z_COMPILER_VERSION >= Z_VERSION(3,1,0) && \
|
|
Z_COMPILER_VERSION <= Z_VERSION(5,0,2)
|
|
|
|
/* Multi-level: offsetof(Type, member.field.field); Fails in 3.0 */
|
|
# pragma clang diagnostic ignored "-Wextended-offsetof"
|
|
#endif
|
|
|
|
#define Z_COMPILER_MACRO_MEMBER_OFFSET(type, member) (__extension__ __builtin_offsetof(type, member)) /* v2.6 */
|
|
|
|
|
|
#define Z_COMPILER_MACRO_VAL_INITIALIZE __builtin_va_start /* v2.6 */
|
|
#define Z_COMPILER_MACRO_VAL_FINALIZE __builtin_va_end /* v2.6 */
|
|
#define Z_COMPILER_MACRO_VAL_READ __builtin_va_arg /* v2.6 */
|
|
|
|
#if __has_builtin(__builtin_va_copy)
|
|
# define Z_COMPILER_MACRO_VAL_COPY(self, output) __builtin_va_copy(output, self) /* v2.6 */
|
|
#endif
|
|
|
|
/* MARK: - Built-ins: Functions */
|
|
|
|
#if __has_builtin(__sync_add_and_fetch_1) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT8_ATOMIC_ADD_THEN_GET __sync_add_and_fetch_1
|
|
# define Z_COMPILER_FUNCTION_SINT8_ATOMIC_ADD_THEN_GET __sync_add_and_fetch_1
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_and_and_fetch_1) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT8_ATOMIC_AND_THEN_GET __sync_and_and_fetch_1
|
|
# define Z_COMPILER_FUNCTION_SINT8_ATOMIC_AND_THEN_GET __sync_and_and_fetch_1
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_fetch_and_add_1) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT8_ATOMIC_GET_THEN_ADD __sync_fetch_and_add_1
|
|
# define Z_COMPILER_FUNCTION_SINT8_ATOMIC_GET_THEN_ADD __sync_fetch_and_add_1
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_fetch_and_and_1) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_SINT8_ATOMIC_GET_THEN_AND __sync_fetch_and_and_1
|
|
# define Z_COMPILER_FUNCTION_UINT8_ATOMIC_GET_THEN_AND __sync_fetch_and_and_1
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_fetch_and_nand_1) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT8_ATOMIC_GET_THEN_NAND __sync_fetch_and_nand_1
|
|
# define Z_COMPILER_FUNCTION_SINT8_ATOMIC_GET_THEN_NAND __sync_fetch_and_nand_1
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_fetch_and_or_1) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT8_ATOMIC_GET_THEN_OR __sync_fetch_and_or_1
|
|
# define Z_COMPILER_FUNCTION_SINT8_ATOMIC_GET_THEN_OR __sync_fetch_and_or_1
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_val_compare_and_swap_1) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT8_ATOMIC_GET_THEN_SET_IF_EQUAL __sync_val_compare_and_swap_1
|
|
# define Z_COMPILER_FUNCTION_SINT8_ATOMIC_GET_THEN_SET_IF_EQUAL __sync_val_compare_and_swap_1
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_fetch_and_sub_1) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT8_ATOMIC_GET_THEN_SUBTRACT __sync_fetch_and_sub_1
|
|
# define Z_COMPILER_FUNCTION_SINT8_ATOMIC_GET_THEN_SUBTRACT __sync_fetch_and_sub_1
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_fetch_and_xor_1) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT8_ATOMIC_GET_THEN_XOR __sync_fetch_and_xor_1
|
|
# define Z_COMPILER_FUNCTION_SINT8_ATOMIC_GET_THEN_XOR __sync_fetch_and_xor_1
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_nand_and_fetch_1) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT8_ATOMIC_NAND_THEN_GET __sync_nand_and_fetch_1
|
|
# define Z_COMPILER_FUNCTION_SINT8_ATOMIC_NAND_THEN_GET __sync_nand_and_fetch_1
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_or_and_fetch_1) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT8_ATOMIC_OR_THEN_GET __sync_or_and_fetch_1
|
|
# define Z_COMPILER_FUNCTION_SINT8_ATOMIC_OR_THEN_GET __sync_or_and_fetch_1
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_bool_compare_and_swap_1) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT8_ATOMIC_SET_IF_EQUAL __sync_bool_compare_and_swap_1
|
|
# define Z_COMPILER_FUNCTION_SINT8_ATOMIC_SET_IF_EQUAL __sync_bool_compare_and_swap_1
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_sub_and_fetch_1) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT8_ATOMIC_SUBTRACT_THEN_GET __sync_sub_and_fetch_1
|
|
# define Z_COMPILER_FUNCTION_SINT8_ATOMIC_SUBTRACT_THEN_GET __sync_sub_and_fetch_1
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_xor_and_fetch_1) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT8_ATOMIC_XOR_THEN_GET __sync_xor_and_fetch_1
|
|
# define Z_COMPILER_FUNCTION_SINT8_ATOMIC_XOR_THEN_GET __sync_xor_and_fetch_1
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_add_and_fetch_2) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT16_ATOMIC_ADD_THEN_GET __sync_add_and_fetch_2
|
|
# define Z_COMPILER_FUNCTION_SINT16_ATOMIC_ADD_THEN_GET __sync_add_and_fetch_2
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_and_and_fetch_2) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT16_ATOMIC_AND_THEN_GET __sync_and_and_fetch_2
|
|
# define Z_COMPILER_FUNCTION_SINT16_ATOMIC_AND_THEN_GET __sync_and_and_fetch_2
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_fetch_and_add_2) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT16_ATOMIC_GET_THEN_ADD __sync_fetch_and_add_2
|
|
# define Z_COMPILER_FUNCTION_SINT16_ATOMIC_GET_THEN_ADD __sync_fetch_and_add_2
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_fetch_and_and_2) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_SINT16_ATOMIC_GET_THEN_AND __sync_fetch_and_and_2
|
|
# define Z_COMPILER_FUNCTION_UINT16_ATOMIC_GET_THEN_AND __sync_fetch_and_and_2
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_fetch_and_nand_2) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT16_ATOMIC_GET_THEN_NAND __sync_fetch_and_nand_2
|
|
# define Z_COMPILER_FUNCTION_SINT16_ATOMIC_GET_THEN_NAND __sync_fetch_and_nand_2
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_fetch_and_or_2) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT16_ATOMIC_GET_THEN_OR __sync_fetch_and_or_2
|
|
# define Z_COMPILER_FUNCTION_SINT16_ATOMIC_GET_THEN_OR __sync_fetch_and_or_2
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_val_compare_and_swap_2) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT16_ATOMIC_GET_THEN_SET_IF_EQUAL __sync_val_compare_and_swap_2
|
|
# define Z_COMPILER_FUNCTION_SINT16_ATOMIC_GET_THEN_SET_IF_EQUAL __sync_val_compare_and_swap_2
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_fetch_and_sub_2) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT16_ATOMIC_GET_THEN_SUBTRACT __sync_fetch_and_sub_2
|
|
# define Z_COMPILER_FUNCTION_SINT16_ATOMIC_GET_THEN_SUBTRACT __sync_fetch_and_sub_2
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_fetch_and_xor_2) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT16_ATOMIC_GET_THEN_XOR __sync_fetch_and_xor_2
|
|
# define Z_COMPILER_FUNCTION_SINT16_ATOMIC_GET_THEN_XOR __sync_fetch_and_xor_2
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_nand_and_fetch_2) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT16_ATOMIC_NAND_THEN_GET __sync_nand_and_fetch_2
|
|
# define Z_COMPILER_FUNCTION_SINT16_ATOMIC_NAND_THEN_GET __sync_nand_and_fetch_2
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_or_and_fetch_2) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT16_ATOMIC_OR_THEN_GET __sync_or_and_fetch_2
|
|
# define Z_COMPILER_FUNCTION_SINT16_ATOMIC_OR_THEN_GET __sync_or_and_fetch_2
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_bool_compare_and_swap_2) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT16_ATOMIC_SET_IF_EQUAL __sync_bool_compare_and_swap_2
|
|
# define Z_COMPILER_FUNCTION_SINT16_ATOMIC_SET_IF_EQUAL __sync_bool_compare_and_swap_2
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_sub_and_fetch_2) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT16_ATOMIC_SUBTRACT_THEN_GET __sync_sub_and_fetch_2
|
|
# define Z_COMPILER_FUNCTION_SINT16_ATOMIC_SUBTRACT_THEN_GET __sync_sub_and_fetch_2
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_xor_and_fetch_2) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT16_ATOMIC_XOR_THEN_GET __sync_xor_and_fetch_2
|
|
# define Z_COMPILER_FUNCTION_SINT16_ATOMIC_XOR_THEN_GET __sync_xor_and_fetch_2
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_add_and_fetch_4) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT32_ATOMIC_ADD_THEN_GET __sync_add_and_fetch_4
|
|
# define Z_COMPILER_FUNCTION_SINT32_ATOMIC_ADD_THEN_GET __sync_add_and_fetch_4
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_and_and_fetch_4) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT32_ATOMIC_AND_THEN_GET __sync_and_and_fetch_4
|
|
# define Z_COMPILER_FUNCTION_SINT32_ATOMIC_AND_THEN_GET __sync_and_and_fetch_4
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_fetch_and_add_4) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT32_ATOMIC_GET_THEN_ADD __sync_fetch_and_add_4
|
|
# define Z_COMPILER_FUNCTION_SINT32_ATOMIC_GET_THEN_ADD __sync_fetch_and_add_4
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_fetch_and_and_4) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_SINT32_ATOMIC_GET_THEN_AND __sync_fetch_and_and_4
|
|
# define Z_COMPILER_FUNCTION_UINT32_ATOMIC_GET_THEN_AND __sync_fetch_and_and_4
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_fetch_and_nand_4) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT32_ATOMIC_GET_THEN_NAND __sync_fetch_and_nand_4
|
|
# define Z_COMPILER_FUNCTION_SINT32_ATOMIC_GET_THEN_NAND __sync_fetch_and_nand_4
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_fetch_and_or_4) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT32_ATOMIC_GET_THEN_OR __sync_fetch_and_or_4
|
|
# define Z_COMPILER_FUNCTION_SINT32_ATOMIC_GET_THEN_OR __sync_fetch_and_or_4
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_val_compare_and_swap_4) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT32_ATOMIC_GET_THEN_SET_IF_EQUAL __sync_val_compare_and_swap_4
|
|
# define Z_COMPILER_FUNCTION_SINT32_ATOMIC_GET_THEN_SET_IF_EQUAL __sync_val_compare_and_swap_4
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_fetch_and_sub_4) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT32_ATOMIC_GET_THEN_SUBTRACT __sync_fetch_and_sub_4
|
|
# define Z_COMPILER_FUNCTION_SINT32_ATOMIC_GET_THEN_SUBTRACT __sync_fetch_and_sub_4
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_fetch_and_xor_4) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT32_ATOMIC_GET_THEN_XOR __sync_fetch_and_xor_4
|
|
# define Z_COMPILER_FUNCTION_SINT32_ATOMIC_GET_THEN_XOR __sync_fetch_and_xor_4
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_nand_and_fetch_4) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT32_ATOMIC_NAND_THEN_GET __sync_nand_and_fetch_4
|
|
# define Z_COMPILER_FUNCTION_SINT32_ATOMIC_NAND_THEN_GET __sync_nand_and_fetch_4
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_or_and_fetch_4) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT32_ATOMIC_OR_THEN_GET __sync_or_and_fetch_4
|
|
# define Z_COMPILER_FUNCTION_SINT32_ATOMIC_OR_THEN_GET __sync_or_and_fetch_4
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_bool_compare_and_swap_4) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT32_ATOMIC_SET_IF_EQUAL __sync_bool_compare_and_swap_4
|
|
# define Z_COMPILER_FUNCTION_SINT32_ATOMIC_SET_IF_EQUAL __sync_bool_compare_and_swap_4
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_sub_and_fetch_4) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT32_ATOMIC_SUBTRACT_THEN_GET __sync_sub_and_fetch_4
|
|
# define Z_COMPILER_FUNCTION_SINT32_ATOMIC_SUBTRACT_THEN_GET __sync_sub_and_fetch_4
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_xor_and_fetch_4) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT32_ATOMIC_XOR_THEN_GET __sync_xor_and_fetch_4
|
|
# define Z_COMPILER_FUNCTION_SINT32_ATOMIC_XOR_THEN_GET __sync_xor_and_fetch_4
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_add_and_fetch_8) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT64_ATOMIC_ADD_THEN_GET __sync_add_and_fetch_8
|
|
# define Z_COMPILER_FUNCTION_SINT64_ATOMIC_ADD_THEN_GET __sync_add_and_fetch_8
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_and_and_fetch_8) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT64_ATOMIC_AND_THEN_GET __sync_and_and_fetch_8
|
|
# define Z_COMPILER_FUNCTION_SINT64_ATOMIC_AND_THEN_GET __sync_and_and_fetch_8
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_fetch_and_add_8) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT64_ATOMIC_GET_THEN_ADD __sync_fetch_and_add_8
|
|
# define Z_COMPILER_FUNCTION_SINT64_ATOMIC_GET_THEN_ADD __sync_fetch_and_add_8
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_fetch_and_and_8) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_SINT64_ATOMIC_GET_THEN_AND __sync_fetch_and_and_8
|
|
# define Z_COMPILER_FUNCTION_UINT64_ATOMIC_GET_THEN_AND __sync_fetch_and_and_8
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_fetch_and_nand_8) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT64_ATOMIC_GET_THEN_NAND __sync_fetch_and_nand_8
|
|
# define Z_COMPILER_FUNCTION_SINT64_ATOMIC_GET_THEN_NAND __sync_fetch_and_nand_8
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_fetch_and_or_8) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT64_ATOMIC_GET_THEN_OR __sync_fetch_and_or_8
|
|
# define Z_COMPILER_FUNCTION_SINT64_ATOMIC_GET_THEN_OR __sync_fetch_and_or_8
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_val_compare_and_swap_8) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT64_ATOMIC_GET_THEN_SET_IF_EQUAL __sync_val_compare_and_swap_8
|
|
# define Z_COMPILER_FUNCTION_SINT64_ATOMIC_GET_THEN_SET_IF_EQUAL __sync_val_compare_and_swap_8
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_fetch_and_sub_8) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT64_ATOMIC_GET_THEN_SUBTRACT __sync_fetch_and_sub_8
|
|
# define Z_COMPILER_FUNCTION_SINT64_ATOMIC_GET_THEN_SUBTRACT __sync_fetch_and_sub_8
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_fetch_and_xor_8) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT64_ATOMIC_GET_THEN_XOR __sync_fetch_and_xor_8
|
|
# define Z_COMPILER_FUNCTION_SINT64_ATOMIC_GET_THEN_XOR __sync_fetch_and_xor_8
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_nand_and_fetch_8) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT64_ATOMIC_NAND_THEN_GET __sync_nand_and_fetch_8
|
|
# define Z_COMPILER_FUNCTION_SINT64_ATOMIC_NAND_THEN_GET __sync_nand_and_fetch_8
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_or_and_fetch_8) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT64_ATOMIC_OR_THEN_GET __sync_or_and_fetch_8
|
|
# define Z_COMPILER_FUNCTION_SINT64_ATOMIC_OR_THEN_GET __sync_or_and_fetch_8
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_bool_compare_and_swap_8) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT64_ATOMIC_SET_IF_EQUAL __sync_bool_compare_and_swap_8
|
|
# define Z_COMPILER_FUNCTION_SINT64_ATOMIC_SET_IF_EQUAL __sync_bool_compare_and_swap_8
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_sub_and_fetch_8) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT64_ATOMIC_SUBTRACT_THEN_GET __sync_sub_and_fetch_8
|
|
# define Z_COMPILER_FUNCTION_SINT64_ATOMIC_SUBTRACT_THEN_GET __sync_sub_and_fetch_8
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_xor_and_fetch_8) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT64_ATOMIC_XOR_THEN_GET __sync_xor_and_fetch_8
|
|
# define Z_COMPILER_FUNCTION_SINT64_ATOMIC_XOR_THEN_GET __sync_xor_and_fetch_8
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_add_and_fetch_16) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT128_ATOMIC_ADD_THEN_GET __sync_add_and_fetch_16
|
|
# define Z_COMPILER_FUNCTION_SINT128_ATOMIC_ADD_THEN_GET __sync_add_and_fetch_16
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_and_and_fetch_16) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT128_ATOMIC_AND_THEN_GET __sync_and_and_fetch_16
|
|
# define Z_COMPILER_FUNCTION_SINT128_ATOMIC_AND_THEN_GET __sync_and_and_fetch_16
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_fetch_and_add_16) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT128_ATOMIC_GET_THEN_ADD __sync_fetch_and_add_16
|
|
# define Z_COMPILER_FUNCTION_SINT128_ATOMIC_GET_THEN_ADD __sync_fetch_and_add_16
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_fetch_and_and_16) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_SINT128_ATOMIC_GET_THEN_AND __sync_fetch_and_and_16
|
|
# define Z_COMPILER_FUNCTION_UINT128_ATOMIC_GET_THEN_AND __sync_fetch_and_and_16
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_fetch_and_nand_16) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT128_ATOMIC_GET_THEN_NAND __sync_fetch_and_nand_16
|
|
# define Z_COMPILER_FUNCTION_SINT128_ATOMIC_GET_THEN_NAND __sync_fetch_and_nand_16
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_fetch_and_or_16) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT128_ATOMIC_GET_THEN_OR __sync_fetch_and_or_16
|
|
# define Z_COMPILER_FUNCTION_SINT128_ATOMIC_GET_THEN_OR __sync_fetch_and_or_16
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_val_compare_and_swap_16) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT128_ATOMIC_GET_THEN_SET_IF_EQUAL __sync_val_compare_and_swap_16
|
|
# define Z_COMPILER_FUNCTION_SINT128_ATOMIC_GET_THEN_SET_IF_EQUAL __sync_val_compare_and_swap_16
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_fetch_and_sub_16) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT128_ATOMIC_GET_THEN_SUBTRACT __sync_fetch_and_sub_16
|
|
# define Z_COMPILER_FUNCTION_SINT128_ATOMIC_GET_THEN_SUBTRACT __sync_fetch_and_sub_16
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_fetch_and_xor_16) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT128_ATOMIC_GET_THEN_XOR __sync_fetch_and_xor_16
|
|
# define Z_COMPILER_FUNCTION_SINT128_ATOMIC_GET_THEN_XOR __sync_fetch_and_xor_16
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_nand_and_fetch_16) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT128_ATOMIC_NAND_THEN_GET __sync_nand_and_fetch_16
|
|
# define Z_COMPILER_FUNCTION_SINT128_ATOMIC_NAND_THEN_GET __sync_nand_and_fetch_16
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_or_and_fetch_16) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT128_ATOMIC_OR_THEN_GET __sync_or_and_fetch_16
|
|
# define Z_COMPILER_FUNCTION_SINT128_ATOMIC_OR_THEN_GET __sync_or_and_fetch_16
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_bool_compare_and_swap_16) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT128_ATOMIC_SET_IF_EQUAL __sync_bool_compare_and_swap_16
|
|
# define Z_COMPILER_FUNCTION_SINT128_ATOMIC_SET_IF_EQUAL __sync_bool_compare_and_swap_16
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_sub_and_fetch_16) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT128_ATOMIC_SUBTRACT_THEN_GET __sync_sub_and_fetch_16
|
|
# define Z_COMPILER_FUNCTION_SINT128_ATOMIC_SUBTRACT_THEN_GET __sync_sub_and_fetch_16
|
|
#endif
|
|
|
|
#if __has_builtin(__sync_xor_and_fetch_16) /* v2.6 */
|
|
# define Z_COMPILER_FUNCTION_UINT128_ATOMIC_XOR_THEN_GET __sync_xor_and_fetch_16
|
|
# define Z_COMPILER_FUNCTION_SINT128_ATOMIC_XOR_THEN_GET __sync_xor_and_fetch_16
|
|
#endif
|
|
|
|
/* MARK: - Built-in traits */
|
|
|
|
/*__is_destructible (not correctly implemented? not available?) */ /* v3.5 (partially implemented), v3.8 (fully implemented) */
|
|
/*__is_sealed*/ /* v3.4 */
|
|
/*__is_trivially_destructible*/ /* v5.0 */
|
|
/*__is_nothrow_destructible (not correctly implemented? not available?) */ /* v3.5 (partially implemented), v3.8 (fully implemented) */
|
|
/*__has_nothrow_move_assign*/ /* v3.3 */
|
|
/*__has_trivial_move_assign*/ /* v3.3 */
|
|
/*__has_trivial_move_constructor*/ /* v3.3 */
|
|
/*__has_unique_object_representations*/ /* v6.0 */
|
|
/*__reference_binds_to_temporary*/ /* 7.0 */
|
|
/*__is_lvalue_expr (operator? specifier?) */ /* v3.0 */
|
|
/*__is_rvalue_expr (operator? specifier?) */ /* v3.0 */
|
|
/*__is_arithmetic*/ /* v3.0 */
|
|
/*__is_floating_point*/ /* v3.0 */
|
|
/*__is_integral*/ /* v3.0 */
|
|
/*__is_complete_type*/ /* v3.0 */
|
|
/*__is_void*/ /* v3.0 */
|
|
/*__is_array*/ /* v3.0 */
|
|
/*__is_function*/ /* v3.0 */
|
|
/*__is_reference*/ /* v3.0 */
|
|
/*__is_lvalue_reference*/ /* v3.0 */
|
|
/*__is_rvalue_reference*/ /* v3.0 */
|
|
/*__is_fundamental*/ /* v3.0 */
|
|
/*__is_object*/ /* v3.0 */
|
|
/*__is_scalar*/ /* v3.0 */
|
|
/*__is_compound*/ /* v3.0 */
|
|
/*__is_pointer*/ /* v3.0 */
|
|
/*__is_member_object_pointer*/ /* v3.0 */
|
|
/*__is_member_function_pointer*/ /* v3.0 */
|
|
/*__is_member_pointer*/ /* v3.0 */
|
|
/*__is_const*/ /* v3.0 */
|
|
/*__is_volatile*/ /* v3.0 */
|
|
/*__is_signed*/ /* v3.0 */
|
|
/*__is_unsigned*/ /* v3.0 */
|
|
/*__is_same*/ /* v3.0 */
|
|
/*__is_convertible (?) Embarcadero */ /* v3.0 */
|
|
/*__array_rank*/ /* v3.0 */
|
|
/*__array_extent*/ /* v3.0 */
|
|
/*__builtin_omp_required_simd_align*/ /* v3.7 */
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
# if __has_builtin(__type_pack_element) /* v3.9 */
|
|
# pragma clang diagnostic push
|
|
# pragma clang diagnostic ignored "-Weverything"
|
|
# define Z_COMPILER_TRAIT_SELECT_TYPE(I, ...) __type_pack_element<I, __VA_ARGS__> /* v3.9 */
|
|
# pragma clang diagnostic pop
|
|
# endif
|
|
|
|
# if Z_COMPILER_VERSION >= Z_VERSION(3,5,0)
|
|
# define Z_COMPILER_TRAIT_TYPE_IS_NOTHROW_ASSIGNABLE __is_nothrow_assignable /* v3.5 */
|
|
# define Z_COMPILER_TRAIT_TYPE_IS_NOTHROW_CONSTRUCTIBLE __is_nothrow_constructible /* v3.5 */
|
|
|
|
# if Z_COMPILER_VERSION >= Z_VERSION(3,9,0)
|
|
# define Z_COMPILER_TRAIT_TYPE_IS_ASSIGNABLE __is_assignable /* v3.9 */
|
|
|
|
# if Z_COMPILER_VERSION >= Z_VERSION(5,0,0)
|
|
# define Z_COMPILER_TRAIT_TYPE_IS_AGGREGATE __is_aggregate /* v5.0 */
|
|
# endif
|
|
# endif
|
|
# endif
|
|
|
|
#endif
|
|
|
|
#if Z_z_HAS_TRAIT(has_virtual_destructor)
|
|
# define Z_COMPILER_TRAIT_TYPE_HAS_VIRTUAL_DESTRUCTOR __has_virtual_destructor /* v2.6 */
|
|
#endif
|
|
|
|
#if Z_z_HAS_TRAIT(is_abstract)
|
|
# define Z_COMPILER_TRAIT_TYPE_IS_ABSTRACT __is_abstract /* v2.6 */
|
|
#endif
|
|
|
|
#if Z_z_HAS_TRAIT(is_base_of)
|
|
# define Z_COMPILER_TRAIT_TYPE_IS_BASE __is_base_of /* v2.6 */
|
|
#endif
|
|
|
|
#if Z_z_HAS_TRAIT(is_constructible)
|
|
# define Z_COMPILER_TRAIT_TYPE_IS_CONSTRUCTIBLE __is_constructible /* v3.5 */
|
|
#endif
|
|
|
|
#if Z_z_HAS_TRAIT(is_convertible_to)
|
|
# define Z_COMPILER_TRAIT_TYPE_IS_CONVERTIBLE __is_convertible_to /* v2.9 */
|
|
#endif
|
|
|
|
#if Z_z_HAS_TRAIT(is_empty)
|
|
# define Z_COMPILER_TRAIT_TYPE_IS_EMPTY __is_empty /* v2.6 */
|
|
#endif
|
|
|
|
#if Z_z_HAS_TRAIT(is_enum)
|
|
# define Z_COMPILER_TRAIT_TYPE_IS_ENUMERATION __is_enum /* v2.6 */
|
|
#endif
|
|
|
|
#if Z_z_HAS_TRAIT(is_final)
|
|
# define Z_COMPILER_TRAIT_TYPE_IS_FINAL __is_final /* v3.1 */
|
|
#endif
|
|
|
|
#if Z_z_HAS_TRAIT(is_interface_class)
|
|
# define Z_COMPILER_TRAIT_TYPE_IS_INTERFACE_CLASS __is_interface_class /* v3.2 (not detectable with __has_extension?) */
|
|
#endif
|
|
|
|
#if Z_z_HAS_TRAIT(is_literal)
|
|
# define Z_COMPILER_TRAIT_TYPE_IS_LITERAL __is_literal /* v2.7 */
|
|
|
|
#elif defined(__cplusplus) && Z_COMPILER_VERSION >= Z_VERSION(3,0,0)
|
|
# define Z_COMPILER_TRAIT_TYPE_IS_LITERAL __is_literal_type /* v3.0 */
|
|
#endif
|
|
|
|
#if Z_z_HAS_TRAIT(has_nothrow_assign)
|
|
# define Z_COMPILER_TRAIT_TYPE_IS_NOTHROW_COPY_ASSIGNABLE __has_nothrow_assign /* v2.6 */
|
|
#endif
|
|
|
|
#if Z_z_HAS_TRAIT(has_nothrow_copy)
|
|
# define Z_COMPILER_TRAIT_TYPE_IS_NOTHROW_COPY_CONSTRUCTIBLE __has_nothrow_copy /* v2.6 */
|
|
#endif
|
|
|
|
#if Z_z_HAS_TRAIT(has_nothrow_constructor)
|
|
# define Z_COMPILER_TRAIT_TYPE_IS_NOTHROW_DEFAULT_CONSTRUCTIBLE __has_nothrow_constructor /* v2.6 */
|
|
#endif
|
|
|
|
#if Z_z_HAS_TRAIT(is_pod)
|
|
# define Z_COMPILER_TRAIT_TYPE_IS_POD __is_pod /* v2.6 */
|
|
#endif
|
|
|
|
#if Z_z_HAS_TRAIT(is_polymorphic)
|
|
# define Z_COMPILER_TRAIT_TYPE_IS_POLYMORPHIC __is_polymorphic /* v2.6 */
|
|
#endif
|
|
|
|
#if Z_z_HAS_TRAIT(is_std_layout)
|
|
# define Z_COMPILER_TRAIT_TYPE_IS_STD_LAYOUT __is_standard_layout /* v3.0 */
|
|
#endif
|
|
|
|
#if Z_z_HAS_TRAIT(is_class)
|
|
# define Z_COMPILER_TRAIT_TYPE_IS_STRUCTURE __is_class /* v2.6 */
|
|
#endif
|
|
|
|
#if Z_z_HAS_TRAIT(is_trivial)
|
|
# define Z_COMPILER_TRAIT_TYPE_IS_TRIVIAL __is_trivial /* v3.0 */
|
|
#endif
|
|
|
|
#if Z_z_HAS_TRAIT(is_trivially_assignable)
|
|
# define Z_COMPILER_TRAIT_TYPE_IS_TRIVIALLY_ASSIGNABLE __is_trivially_assignable /* v3.1 */
|
|
#endif
|
|
|
|
#if Z_z_HAS_TRAIT(is_trivially_constructible)
|
|
# define Z_COMPILER_TRAIT_TYPE_IS_TRIVIALLY_CONSTRUCTIBLE __is_trivially_constructible /* v3.1 */
|
|
#endif
|
|
|
|
/*--------------------------------------------------.
|
|
| See: |
|
|
| https://github.com/abseil/abseil-cpp/issues/1201 |
|
|
| https://reviews.llvm.org/D127593 |
|
|
| https://github.com/llvm/llvm-project/issues/33063 |
|
|
'==================================================*/
|
|
|
|
#if Z_z_HAS_TRAIT(has_trivial_assign) && Z_COMPILER_VERSION < Z_VERSION(10,0,0) /* Check version */
|
|
# define Z_COMPILER_TRAIT_TYPE_IS_TRIVIALLY_COPY_ASSIGNABLE __has_trivial_assign /* v2.6 */
|
|
#endif
|
|
|
|
#if Z_z_HAS_TRAIT(is_trivially_copyable)
|
|
# define Z_COMPILER_TRAIT_TYPE_IS_TRIVIALLY_COPY_CONSTRUCTIBLE __is_trivially_copyable
|
|
#elif Z_z_HAS_TRAIT(has_trivial_copy)
|
|
# define Z_COMPILER_TRAIT_TYPE_IS_TRIVIALLY_COPY_CONSTRUCTIBLE __has_trivial_copy /* v2.6 */
|
|
#endif
|
|
|
|
#if Z_z_HAS_TRAIT(is_trivially_copyable)
|
|
# define Z_COMPILER_TRAIT_TYPE_IS_TRIVIALLY_COPYABLE __is_trivially_copyable /* v3.0 */
|
|
#endif
|
|
|
|
#if Z_z_HAS_TRAIT(is_trivially_constructible)
|
|
# define Z_COMPILER_TRAIT_TYPE_IS_TRIVIALLY_DEFAULT_CONSTRUCTIBLE __is_trivially_constructible
|
|
#elif Z_z_HAS_TRAIT(has_trivial_constructor)
|
|
# define Z_COMPILER_TRAIT_TYPE_IS_TRIVIALLY_DEFAULT_CONSTRUCTIBLE __has_trivial_constructor /* v2.6 */
|
|
#endif
|
|
|
|
#if Z_z_HAS_TRAIT(is_trivially_destructible)
|
|
# define Z_COMPILER_TRAIT_TYPE_IS_TRIVIALLY_DESTRUCTIBLE __is_trivially_destructible
|
|
#elif Z_z_HAS_TRAIT(has_trivial_destructor)
|
|
# define Z_COMPILER_TRAIT_TYPE_IS_TRIVIALLY_DESTRUCTIBLE __has_trivial_destructor /* v2.6 */
|
|
#endif
|
|
|
|
#if Z_z_HAS_TRAIT(is_union)
|
|
# define Z_COMPILER_TRAIT_TYPE_IS_UNION __is_union /* v2.6 */
|
|
#endif
|
|
|
|
#if Z_z_HAS_TRAIT(underlying_type)
|
|
# define Z_COMPILER_TRAIT_TYPE_UNDERLYING_TYPE __underlying_type /* v3.0 */
|
|
#endif
|
|
|
|
/* MARK: - Private macros clean-up */
|
|
|
|
#undef Z_z_HAS_ATTRIBUTE
|
|
#undef Z_z_HAS_CPP_ATTRIBUTE
|
|
#undef Z_z_HAS_EXTENSION
|
|
#undef Z_z_HAS_GNU_EXTENSIONS
|
|
#undef Z_z_HAS_MSVC_COMPATIBILITY
|
|
#undef Z_z_HAS_TRAIT
|
|
|
|
#define Z_COMPILER_HAS_MAGIC_CONSTANT_MANGLED_FUNCTION_NAME 1
|
|
|
|
#endif /* Z_inspection_compiler_modules_Clang_H */
|