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