zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

_mingw_mac.h (12934B) - Raw


      1 /**
      2  * This file has no copyright assigned and is placed in the Public Domain.
      3  * This file is part of the mingw-w64 runtime package.
      4  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
      5  */
      6 
      7 #ifndef _INC_CRTDEFS_MACRO
      8 #define _INC_CRTDEFS_MACRO
      9 
     10 #define __MINGW64_PASTE2(x, y) x ## y
     11 #define __MINGW64_PASTE(x, y) __MINGW64_PASTE2(x, y)
     12 
     13 #define __STRINGIFY(x) #x
     14 #define __MINGW64_STRINGIFY(x) \
     15   __STRINGIFY(x)
     16 
     17 #define __MINGW64_VERSION_MAJOR 13
     18 #define __MINGW64_VERSION_MINOR 0
     19 #define __MINGW64_VERSION_BUGFIX 0
     20 
     21 /* This macro holds an monotonic increasing value, which indicates
     22    a specific fix/patch is present on trunk.  This value isn't related to
     23    minor/major version-macros.  It is increased on demand, if a big
     24    fix was applied to trunk.  This macro gets just increased on trunk.  For
     25    other branches its value won't be modified.  */
     26 
     27 #define __MINGW64_VERSION_RC 0
     28 
     29 #define __MINGW64_VERSION_STR	\
     30   __MINGW64_STRINGIFY(__MINGW64_VERSION_MAJOR) \
     31   "." \
     32   __MINGW64_STRINGIFY(__MINGW64_VERSION_MINOR) \
     33   "." \
     34   __MINGW64_STRINGIFY(__MINGW64_VERSION_BUGFIX)
     35 
     36 #define __MINGW64_VERSION_STATE "alpha"
     37 
     38 /* mingw.org's version macros: these make gcc to define
     39    MINGW32_SUPPORTS_MT_EH and to use the _CRT_MT global
     40    and the __mingwthr_key_dtor() function from the MinGW
     41    CRT in its private gthr-win32.h header. */
     42 #define __MINGW32_MAJOR_VERSION 3
     43 #define __MINGW32_MINOR_VERSION 11
     44 
     45 /* Set VC specific compiler target macros.  */
     46 #if defined(__x86_64) && defined(_X86_)
     47 #  undef _X86_  /* _X86_ is not for __x86_64 */
     48 #endif
     49 
     50 #if defined(_X86_) && !defined(_M_IX86) && !defined(_M_IA64) \
     51    && !defined(_M_AMD64) && !defined(__x86_64)
     52 #  if defined(__i486__)
     53 #    define _M_IX86 400
     54 #  elif defined(__i586__)
     55 #    define _M_IX86 500
     56 #  elif defined(__i686__)
     57 #    define _M_IX86 600
     58 #  else
     59 #    define _M_IX86 300
     60 #  endif
     61 #endif /* if defined(_X86_) && !defined(_M_IX86) && !defined(_M_IA64) ... */
     62 
     63 #if defined(__x86_64) && !defined(_M_IX86) && !defined(_M_IA64) \
     64    && !defined(_M_AMD64)
     65 #  define _M_AMD64 100
     66 #  define _M_X64 100
     67 #endif
     68 
     69 #if defined(__ia64__) && !defined(_M_IX86) && !defined(_M_IA64) \
     70    && !defined(_M_AMD64) && !defined(_X86_) && !defined(__x86_64)
     71 #  define _M_IA64 100
     72 #endif
     73 
     74 #if defined(__arm__) && !defined(_M_ARM) && !defined(_M_ARMT) \
     75    && !defined(_M_THUMB)
     76 #  define _M_ARM 100
     77 #  define _M_ARMT 100
     78 #  define _M_THUMB 100
     79 #  ifndef _ARM_
     80 #    define _ARM_ 1
     81 #  endif
     82 #  ifndef _M_ARM_NT
     83 #    define _M_ARM_NT 1
     84 #  endif
     85 #endif
     86 
     87 #if defined(__aarch64__) && !defined(_M_ARM64)
     88 #  define _M_ARM64 1
     89 #  ifndef _ARM64_
     90 #    define _ARM64_ 1
     91 #  endif
     92 #endif
     93 
     94 #if defined(__arm64ec__) && !defined(_M_ARM64EC)
     95 #  define _M_ARM64EC 1
     96 #  ifndef _ARM64EC_
     97 #    define _ARM64EC_ 1
     98 #  endif
     99 #endif
    100 
    101 #ifndef _X86_
    102    /* MS does not prefix symbols by underscores for 64-bit.  */
    103 #  ifndef __MINGW_USE_UNDERSCORE_PREFIX
    104      /* As we have to support older gcc version, which are using underscores
    105       as symbol prefix for x64, we have to check here for the user label
    106       prefix defined by gcc. */
    107 #    ifdef __USER_LABEL_PREFIX__
    108 #      pragma push_macro ("_")
    109 #      undef _
    110 #      define _ 1
    111 #      if (__USER_LABEL_PREFIX__ + 0) != 0
    112 #        define __MINGW_USE_UNDERSCORE_PREFIX 1
    113 #      else
    114 #        define __MINGW_USE_UNDERSCORE_PREFIX 0
    115 #      endif
    116 #      undef _
    117 #      pragma pop_macro ("_")
    118 #    else /* ! __USER_LABEL_PREFIX__ */
    119 #      define __MINGW_USE_UNDERSCORE_PREFIX 0
    120 #    endif /* __USER_LABEL_PREFIX__ */
    121 #  endif
    122 #else /* ! ifndef _X86_ */
    123    /* For x86 we have always to prefix by underscore.  */
    124 #  undef __MINGW_USE_UNDERSCORE_PREFIX
    125 #  define __MINGW_USE_UNDERSCORE_PREFIX 1
    126 #endif /* ifndef _X86_ */
    127 
    128 #if __MINGW_USE_UNDERSCORE_PREFIX == 0
    129 #  define __MINGW_IMP_SYMBOL(sym) __MINGW64_PASTE(__imp_,sym)
    130 #  define __MINGW_IMP_LSYMBOL(sym) __MINGW64_PASTE(__imp_,sym)
    131 #  define __MINGW_USYMBOL(sym) sym
    132 #  define __MINGW_LSYMBOL(sym) __MINGW64_PASTE(_,sym)
    133 #else /* ! if __MINGW_USE_UNDERSCORE_PREFIX == 0 */
    134 #  define __MINGW_IMP_SYMBOL(sym) __MINGW64_PASTE(_imp__,sym)
    135 #  define __MINGW_IMP_LSYMBOL(sym) __MINGW64_PASTE(__imp__,sym)
    136 #  define __MINGW_USYMBOL(sym) __MINGW64_PASTE(_,sym)
    137 #  define __MINGW_LSYMBOL(sym) sym
    138 #endif /* if __MINGW_USE_UNDERSCORE_PREFIX == 0 */
    139 
    140 #define __MINGW_ASM_CALL(func) __asm__(__MINGW64_STRINGIFY(__MINGW_USYMBOL(func)))
    141 #define __MINGW_ASM_CRT_CALL(func) __asm__(__STRINGIFY(func))
    142 
    143 #ifndef __PTRDIFF_TYPE__
    144 #  ifdef _WIN64
    145 #    define __PTRDIFF_TYPE__ long long int
    146 #  else
    147 #    define __PTRDIFF_TYPE__ long int
    148 #  endif
    149 #endif
    150 
    151 #ifndef __SIZE_TYPE__
    152 #  ifdef _WIN64
    153 #    define __SIZE_TYPE__ long long unsigned int
    154 #  else
    155 #    define __SIZE_TYPE__ long unsigned int
    156 #  endif
    157 #endif
    158 
    159 #ifndef __WCHAR_TYPE__
    160 #  define __WCHAR_TYPE__ unsigned short
    161 #endif
    162 
    163 #ifndef __WINT_TYPE__
    164 #  define __WINT_TYPE__ unsigned short
    165 #endif
    166 
    167 #undef __MINGW_EXTENSION
    168 
    169 #ifdef __WIDL__
    170 #  define __MINGW_EXTENSION
    171 #else
    172 #  if defined(__GNUC__) || defined(__GNUG__)
    173 #    define __MINGW_EXTENSION __extension__
    174 #  else
    175 #    define __MINGW_EXTENSION
    176 #  endif
    177 #endif /* __WIDL__ */
    178 
    179 /* Special case nameless struct/union.  */
    180 #ifndef __C89_NAMELESS
    181 #  define __C89_NAMELESS __MINGW_EXTENSION
    182 #  define __C89_NAMELESSSTRUCTNAME
    183 #  define __C89_NAMELESSSTRUCTNAME1
    184 #  define __C89_NAMELESSSTRUCTNAME2
    185 #  define __C89_NAMELESSSTRUCTNAME3
    186 #  define __C89_NAMELESSSTRUCTNAME4
    187 #  define __C89_NAMELESSSTRUCTNAME5
    188 #  define __C89_NAMELESSUNIONNAME
    189 #  define __C89_NAMELESSUNIONNAME1
    190 #  define __C89_NAMELESSUNIONNAME2
    191 #  define __C89_NAMELESSUNIONNAME3
    192 #  define __C89_NAMELESSUNIONNAME4
    193 #  define __C89_NAMELESSUNIONNAME5
    194 #  define __C89_NAMELESSUNIONNAME6
    195 #  define __C89_NAMELESSUNIONNAME7
    196 #  define __C89_NAMELESSUNIONNAME8
    197 #endif
    198 
    199 #ifndef __GNU_EXTENSION
    200 #  define __GNU_EXTENSION __MINGW_EXTENSION
    201 #endif
    202 
    203 /* MinGW-w64 has some additional C99 printf/scanf feature support.
    204    So we add some helper macros to ease recognition of them.  */
    205 #define __MINGW_HAVE_ANSI_C99_PRINTF 1
    206 #define __MINGW_HAVE_WIDE_C99_PRINTF 1
    207 #define __MINGW_HAVE_ANSI_C99_SCANF 1
    208 #define __MINGW_HAVE_WIDE_C99_SCANF 1
    209 
    210 #ifdef __MINGW_USE_BROKEN_INTERFACE
    211 #  define __MINGW_POISON_NAME(__IFACE) __IFACE
    212 #else
    213 #  define __MINGW_POISON_NAME(__IFACE) \
    214      __IFACE##_layout_has_not_been_verified_and_its_declaration_is_most_likely_incorrect
    215 #endif
    216 
    217 #ifndef __MSABI_LONG
    218 #  ifndef __LP64__
    219 #    define __MSABI_LONG(x) x ## l
    220 #  else
    221 #    define __MSABI_LONG(x) x
    222 #  endif
    223 #endif
    224 
    225 #if __GNUC__
    226 #  define __MINGW_GCC_VERSION	(__GNUC__ * 10000 + \
    227       __GNUC_MINOR__	* 100	+ \
    228       __GNUC_PATCHLEVEL__)
    229 #else
    230 #  define __MINGW_GCC_VERSION 0
    231 #endif
    232 
    233 #if defined (__GNUC__) && defined (__GNUC_MINOR__)
    234 #  define __MINGW_GNUC_PREREQ(major, minor) \
    235       (__GNUC__ > (major) \
    236       || (__GNUC__ == (major) && __GNUC_MINOR__ >= (minor)))
    237 #else
    238 #  define __MINGW_GNUC_PREREQ(major, minor) 0
    239 #endif
    240 
    241 #if defined (_MSC_VER)
    242 #  define __MINGW_MSC_PREREQ(major, minor) \
    243       (_MSC_VER >= (major * 100 + minor * 10))
    244 #else
    245 #  define __MINGW_MSC_PREREQ(major, minor) 0
    246 #endif
    247 
    248 #ifdef __MINGW_MSVC_COMPAT_WARNINGS
    249 #  if __MINGW_GNUC_PREREQ (4, 5)
    250 #    define __MINGW_ATTRIB_DEPRECATED_STR(X) \
    251        __attribute__ ((__deprecated__ (X)))
    252 #  else
    253 #    define __MINGW_ATTRIB_DEPRECATED_STR(X) \
    254        __MINGW_ATTRIB_DEPRECATED
    255 #  endif
    256 #else
    257 #  define __MINGW_ATTRIB_DEPRECATED_STR(X)
    258 #endif /* ifdef __MINGW_MSVC_COMPAT_WARNINGS */
    259 
    260 #define __MINGW_SEC_WARN_STR \
    261   "This function or variable may be unsafe, use _CRT_SECURE_NO_WARNINGS to disable deprecation"
    262 
    263 #define __MINGW_MSVC2005_DEPREC_STR \
    264   "This POSIX function is deprecated beginning in Visual C++ 2005, use _CRT_NONSTDC_NO_DEPRECATE to disable deprecation"
    265 
    266 #if !defined (_CRT_NONSTDC_NO_DEPRECATE)
    267 #  define __MINGW_ATTRIB_DEPRECATED_MSVC2005 \
    268       __MINGW_ATTRIB_DEPRECATED_STR(__MINGW_MSVC2005_DEPREC_STR)
    269 #else
    270 #  define __MINGW_ATTRIB_DEPRECATED_MSVC2005
    271 #endif
    272 
    273 #if !defined (_CRT_SECURE_NO_WARNINGS)
    274 #  define __MINGW_ATTRIB_DEPRECATED_SEC_WARN \
    275       __MINGW_ATTRIB_DEPRECATED_STR(__MINGW_SEC_WARN_STR)
    276 #else
    277 #  define __MINGW_ATTRIB_DEPRECATED_SEC_WARN
    278 #endif
    279 
    280 #ifdef __clang__
    281 #define __MINGW_MS_PRINTF(__format,__args) \
    282   __attribute__((__format__(__printf__, __format,__args)))
    283 
    284 #define __MINGW_MS_SCANF(__format,__args) \
    285   __attribute__((__format__(__scanf__,  __format,__args)))
    286 
    287 #define __MINGW_GNU_PRINTF(__format,__args) \
    288   __attribute__((__format__(__printf__,__format,__args)))
    289 
    290 #define __MINGW_GNU_SCANF(__format,__args) \
    291   __attribute__((__format__(__scanf__, __format,__args)))
    292 #else
    293 #define __MINGW_MS_PRINTF(__format,__args) \
    294   __attribute__((__format__(__ms_printf__, __format,__args)))
    295 
    296 #define __MINGW_MS_SCANF(__format,__args) \
    297   __attribute__((__format__(__ms_scanf__,  __format,__args)))
    298 
    299 #define __MINGW_GNU_PRINTF(__format,__args) \
    300   __attribute__((__format__(__gnu_printf__,__format,__args)))
    301 
    302 #define __MINGW_GNU_SCANF(__format,__args) \
    303   __attribute__((__format__(__gnu_scanf__, __format,__args)))
    304 #endif /* !__clang__ */
    305 
    306 #undef __mingw_ovr
    307 
    308 #ifdef __cplusplus
    309 #  define __mingw_ovr  inline __cdecl
    310 #elif defined (__GNUC__)
    311 #  define __mingw_ovr static \
    312       __attribute__ ((__unused__)) __inline__ __cdecl
    313 #else
    314 #  define __mingw_ovr static __cdecl
    315 #endif /* __cplusplus */
    316 
    317 #if __MINGW_GNUC_PREREQ(4, 3) || defined(__clang__)
    318 #  define __mingw_attribute_artificial \
    319      __attribute__((__artificial__))
    320 #else
    321 #  define __mingw_attribute_artificial
    322 #endif
    323 
    324 #define __MINGW_SELECTANY  __attribute__((__selectany__))
    325 
    326 #pragma push_macro("__has_builtin")
    327 #ifndef __has_builtin
    328 #  define __has_builtin(x) 0
    329 #endif
    330 
    331 #if defined(__MINGW32__) && _FORTIFY_SOURCE > 0 && __OPTIMIZE__ > 0 \
    332     && __MINGW_GNUC_PREREQ(4, 1)
    333 #  if _FORTIFY_SOURCE > 3
    334 #    warning Using _FORTIFY_SOURCE=3 (levels > 3 are not supported)
    335 #  endif
    336 #  if _FORTIFY_SOURCE > 2
    337 #    if __has_builtin(__builtin_dynamic_object_size)
    338 #      define __MINGW_FORTIFY_LEVEL 3
    339 #    else
    340 #      warning Using _FORTIFY_SOURCE=2 (level 3 requires __builtin_dynamic_object_size support)
    341 #      define __MINGW_FORTIFY_LEVEL 2
    342 #    endif
    343 #  elif _FORTIFY_SOURCE > 1
    344 #    define __MINGW_FORTIFY_LEVEL 2
    345 #  else
    346 #    define __MINGW_FORTIFY_LEVEL 1
    347 #  endif
    348 #else
    349 #  define __MINGW_FORTIFY_LEVEL 0
    350 #endif
    351 
    352 #if __MINGW_FORTIFY_LEVEL > 0
    353    /* Calling an function with __attribute__((__warning__("...")))
    354       from a system include __inline__ function does not print
    355       a warning unless caller has __attribute__((__artificial__)). */
    356 #  define __mingw_bos_declare \
    357      void __cdecl __chk_fail(void) __attribute__((__noreturn__)); \
    358      void __cdecl __mingw_chk_fail_warn(void) __MINGW_ASM_CALL(__chk_fail) \
    359      __attribute__((__noreturn__)) \
    360      __attribute__((__warning__("Buffer overflow detected")))
    361 #  if __MINGW_FORTIFY_LEVEL > 2
    362 #    define __mingw_bos(p, maxtype) \
    363        __builtin_dynamic_object_size((p), (maxtype) > 0)
    364 #    define __mingw_bos_known(p) \
    365        (__builtin_object_size(p, 0) != (size_t)-1 \
    366        || !__builtin_constant_p(__mingw_bos(p, 0)))
    367 #  else
    368 #    define __mingw_bos(p, maxtype) \
    369        __builtin_object_size((p), ((maxtype) > 0) && (__MINGW_FORTIFY_LEVEL > 1))
    370 #    define __mingw_bos_known(p) \
    371        (__mingw_bos(p, 0) != (size_t)-1)
    372 #  endif
    373 #  define __mingw_bos_cond_chk(c) \
    374      (__builtin_expect((c), 1) ? (void)0 : __chk_fail())
    375 #  define __mingw_bos_ptr_chk(p, n, maxtype) \
    376      __mingw_bos_cond_chk(!__mingw_bos_known(p) || __mingw_bos(p, maxtype) >= (size_t)(n))
    377 #  define __mingw_bos_ptr_chk_warn(p, n, maxtype) \
    378      ((__mingw_bos_known(p) \
    379      && __builtin_constant_p(__mingw_bos(p, maxtype) < (size_t)(n)) \
    380      && __mingw_bos(p, maxtype) < (size_t)(n)) \
    381      ? __mingw_chk_fail_warn() : __mingw_bos_ptr_chk(p, n, maxtype))
    382 #  define __mingw_bos_ovr __mingw_ovr \
    383      __attribute__((__always_inline__)) \
    384      __mingw_attribute_artificial
    385 #  define __mingw_bos_extern_ovr extern __inline__ __cdecl \
    386      __attribute__((__always_inline__, __gnu_inline__)) \
    387      __mingw_attribute_artificial
    388 #else
    389 #  define __mingw_bos_ovr __mingw_ovr
    390 #endif /* __MINGW_FORTIFY_LEVEL > 0 */
    391 
    392 /* If _FORTIFY_SOURCE is enabled, some inline functions may use
    393    __builtin_va_arg_pack().  GCC may report an error if the address
    394    of such a function is used.  Set _FORTIFY_VA_ARG=0 in this case.
    395    Clang doesn't, as of version 15, yet implement __builtin_va_arg_pack().  */
    396 #if __MINGW_FORTIFY_LEVEL > 0 \
    397     && ((__MINGW_GNUC_PREREQ(4, 3) && !defined(__clang__)) \
    398     || __has_builtin(__builtin_va_arg_pack)) \
    399     && (!defined(_FORTIFY_VA_ARG) || _FORTIFY_VA_ARG > 0)
    400 #  define __MINGW_FORTIFY_VA_ARG 1
    401 #else
    402 #  define __MINGW_FORTIFY_VA_ARG 0
    403 #endif
    404 
    405 #pragma pop_macro("__has_builtin")
    406 
    407 /* Enable workaround for ABI incompatibility on affected platforms */
    408 #ifndef WIDL_EXPLICIT_AGGREGATE_RETURNS
    409 #if defined(__GNUC__) && defined(__cplusplus)
    410 #define  WIDL_EXPLICIT_AGGREGATE_RETURNS
    411 #endif
    412 #endif
    413 
    414 #endif	/* _INC_CRTDEFS_MACRO */