master
  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 */