xref: /reactos/sdk/include/vcruntime/_mingw.h (revision 63bb46a2)
1 /**
2  * This file has no copyright assigned and is placed in the Public Domain.
3  * This file is part of the w64 mingw-runtime package.
4  * No warranty is given; refer to the file DISCLAIMER within this package.
5  */
6 
7 #ifndef _INC_MINGW
8 #define _INC_MINGW
9 
10 #ifndef _INTEGRAL_MAX_BITS
11 #define _INTEGRAL_MAX_BITS 64
12 #endif
13 
14 #ifndef MINGW64
15 #define MINGW64
16 #define MINGW64_VERSION	1.0
17 #define MINGW64_VERSION_MAJOR	1
18 #define MINGW64_VERSION_MINOR	0
19 #define MINGW64_VERSION_STATE	"alpha"
20 #endif
21 
22 #ifdef _WIN64
23 #ifdef __stdcall
24 #undef __stdcall
25 #endif
26 #define __stdcall
27 #endif
28 
29 #ifdef __GNUC__
30  /* These compilers do support __declspec */
31 # if !defined(__MINGW32__) && !defined(__MINGW64__) && !defined(__CYGWIN32__)
32 #  define __declspec(x) __attribute__((x))
33 # endif
34 #endif
35 
36 #ifdef _MSC_VER
37 #define __restrict__ /* nothing */
38 #endif
39 
40 #if defined (__GNUC__) && defined (__GNUC_MINOR__)
41 #define __MINGW_GNUC_PREREQ(major, minor) \
42   (__GNUC__ > (major) \
43    || (__GNUC__ == (major) && __GNUC_MINOR__ >= (minor)))
44 #else
45 #define __MINGW_GNUC_PREREQ(major, minor)  0
46 #endif
47 
48 #if defined (_MSC_VER)
49 #define __MINGW_MSC_PREREQ(major, minor) (_MSC_VER >= (major * 100 + minor * 10))
50 #else
51 #define __MINGW_MSC_PREREQ(major, minor) 0
52 #endif
53 
54 #define USE___UUIDOF	0
55 
56 #ifdef __cplusplus
57 # define __CRT_INLINE inline
58 #elif defined(_MSC_VER)
59 # define __CRT_INLINE __inline
60 #elif defined(__GNUC__)
61 # if defined(__clang__) || ( __MINGW_GNUC_PREREQ(4, 3)  &&  __STDC_VERSION__ >= 199901L)
62 #  define __CRT_INLINE extern inline __attribute__((__always_inline__,__gnu_inline__))
63 # else
64 #  define __CRT_INLINE extern __inline__ __attribute__((__always_inline__))
65 # endif
66 #endif
67 
68 #ifdef __cplusplus
69 # define __UNUSED_PARAM(x)
70 #else
71 # ifdef __GNUC__
72 #  define __UNUSED_PARAM(x) x __attribute__ ((__unused__))
73 # else
74 #  define __UNUSED_PARAM(x) x
75 # endif
76 #endif
77 
78 #ifdef __cplusplus
79 # define __unaligned
80 #else
81 # ifdef __GNUC__
82 #  define __unaligned
83 # elif defined(_MSC_VER) && !defined(_M_IA64) && !defined(_M_AMD64)
84 #  define __unaligned
85 # else
86 #  define __unaligned
87 # endif
88 #endif
89 
90 #ifdef __GNUC__
91 #define __MINGW_ATTRIB_NORETURN __attribute__ ((__noreturn__))
92 #define __MINGW_ATTRIB_CONST __attribute__ ((__const__))
93 #elif __MINGW_MSC_PREREQ(12, 0)
94 #define __MINGW_ATTRIB_NORETURN __declspec(noreturn)
95 #define __MINGW_ATTRIB_CONST
96 #else
97 #define __MINGW_ATTRIB_NORETURN
98 #define __MINGW_ATTRIB_CONST
99 #endif
100 
101 #if __MINGW_GNUC_PREREQ (3, 0)
102 #define __MINGW_ATTRIB_MALLOC __attribute__ ((__malloc__))
103 #define __MINGW_ATTRIB_PURE __attribute__ ((__pure__))
104 #elif __MINGW_MSC_PREREQ(14, 0)
105 #define __MINGW_ATTRIB_MALLOC __declspec(noalias) __declspec(restrict)
106 #define __MINGW_ATTRIB_PURE
107 #else
108 #define __MINGW_ATTRIB_MALLOC
109 #define __MINGW_ATTRIB_PURE
110 #endif
111 
112 /* Attribute `nonnull' was valid as of gcc 3.3.  We don't use GCC's
113    variadiac macro facility, because variadic macros cause syntax
114    errors with  --traditional-cpp.  */
115 #if  __MINGW_GNUC_PREREQ (3, 3)
116 #define __MINGW_ATTRIB_NONNULL(arg) __attribute__ ((__nonnull__ (arg)))
117 #else
118 #define __MINGW_ATTRIB_NONNULL(arg)
119 #endif /* GNUC >= 3.3 */
120 
121 #ifdef __GNUC__
122 #define __MINGW_ATTRIB_UNUSED __attribute__ ((__unused__))
123 #else
124 #define __MINGW_ATTRIB_UNUSED
125 #endif /* ATTRIBUTE_UNUSED */
126 
127 #if  __MINGW_GNUC_PREREQ (3, 1)
128 #define __MINGW_ATTRIB_DEPRECATED __attribute__ ((__deprecated__))
129 #elif __MINGW_MSC_PREREQ(12, 0)
130 #define __MINGW_ATTRIB_DEPRECATED __declspec(deprecated)
131 #else
132 #define __MINGW_ATTRIB_DEPRECATED
133 #endif
134 
135 #if  __MINGW_GNUC_PREREQ (3, 1)
136 #define __MINGW_ATTRIB_DEPRECATED_SEC_WARN //__attribute__ ((__deprecated__))
137 #elif __MINGW_MSC_PREREQ(12, 0)
138 #define __MINGW_ATTRIB_DEPRECATED_SEC_WARN //__declspec(deprecated)
139 #else
140 #define __MINGW_ATTRIB_DEPRECATED_SEC_WARN
141 #endif
142 
143 #if  __MINGW_GNUC_PREREQ (3, 1)
144 #define __MINGW_ATTRIB_DEPRECATED_MSVC2005 //__attribute__ ((__deprecated__))
145 #elif __MINGW_MSC_PREREQ(12, 0)
146 #define __MINGW_ATTRIB_DEPRECATED_MSVC2005 //__declspec(deprecated)
147 #else
148 #define __MINGW_ATTRIB_DEPRECATED_MSVC2005
149 #endif
150 
151 #if  __MINGW_GNUC_PREREQ (3, 3)
152 #define __MINGW_NOTHROW __attribute__ ((__nothrow__))
153 #elif __MINGW_MSC_PREREQ(12, 0) && defined (__cplusplus)
154 #define __MINGW_NOTHROW __declspec(nothrow)
155 #else
156 #define __MINGW_NOTHROW
157 #endif
158 
159 /* TODO: Mark (almost) all CRT functions as __MINGW_NOTHROW.  This will
160 allow GCC to optimize away some EH unwind code, at least in DW2 case.  */
161 
162 #ifndef __MINGW_EXTENSION
163 #if defined(__GNUC__) || defined(__GNUG__)
164 #define __MINGW_EXTENSION       __extension__
165 #else
166 #define __MINGW_EXTENSION
167 #endif
168 #endif
169 
170 #ifndef __MSVCRT_VERSION__
171 /*  High byte is the major version, low byte is the minor. */
172 # define __MSVCRT_VERSION__ 0x0700
173 #endif
174 
175 //#ifndef WINVER
176 //#define WINVER 0x0502
177 //#endif
178 
179 //#ifndef _WIN32_WINNT
180 //#define _WIN32_WINNT 0x502
181 //#endif
182 
183 #ifdef __GNUC__
184 #define __int8 char
185 #define __int16 short
186 #define __int32 int
187 #define __int64 long long
188 # define __ptr32
189 # define __ptr64
190 # ifdef __cplusplus
191 #  define __forceinline inline __attribute__((__always_inline__))
192 # else
193 #  if (( __MINGW_GNUC_PREREQ(4, 3)  &&  __STDC_VERSION__ >= 199901L) || defined(__clang__))
194 #   define __forceinline extern inline __attribute__((__always_inline__,__gnu_inline__))
195 #  else
196 #   define __forceinline extern __inline__ __attribute__((__always_inline__))
197 #  endif
198 # endif
199 #endif
200 
201 #ifdef __cplusplus
202 #ifndef __nothrow
203 #define __nothrow __declspec(nothrow)
204 #endif
205 #else
206 #ifndef __nothrow
207 #define __nothrow
208 #endif
209 #endif
210 
211 #if defined(_WIN64) && !defined(_MSC_VER)
212 #undef USE_MINGW_SETJMP_TWO_ARGS
213 #define USE_MINGW_SETJMP_TWO_ARGS
214 #endif
215 
216 /* Disable deprecation for now! */
217 #define _CRT_SECURE_NO_DEPRECATE
218 #define _CRT_SECURE_NO_DEPRECATE_CORE
219 
220 #define __crt_typefix(ctype)
221 
222 #ifndef _CRT_UNUSED
223 #define _CRT_UNUSED(x) (void)x
224 #endif
225 
226 #if defined(_MSC_VER) && !defined(__clang__)
227 #define ATTRIB_NORETURN
228 #define _DECLSPEC_INTRIN_TYPE __declspec(intrin_type)
229 #else
230 #define ATTRIB_NORETURN DECLSPEC_NORETURN
231 #define _DECLSPEC_INTRIN_TYPE
232 #endif
233 
234 /* Define to a function attribute for Microsoft hotpatch assembly prefix. */
235 #ifndef DECLSPEC_HOTPATCH
236 #if defined(_MSC_VER) || defined(__clang__)
237 /* FIXME: http://llvm.org/bugs/show_bug.cgi?id=20888 */
238 #define DECLSPEC_HOTPATCH
239 #else
240 #define DECLSPEC_HOTPATCH __attribute__((__ms_hook_prologue__))
241 #endif
242 #endif /* DECLSPEC_HOTPATCH */
243 
244 #ifndef __INTRIN_INLINE
245 #  define __INTRIN_INLINE extern __inline__ __attribute__((__always_inline__,__gnu_inline__,artificial))
246 #endif
247 
248 #ifndef HAS_BUILTIN
249 #  ifdef __clang__
250 #    define HAS_BUILTIN(x) __has_builtin(x)
251 #  else
252 #    define HAS_BUILTIN(x) 0
253 #  endif
254 #endif
255 
256 #ifdef __cplusplus
257 #  define __mingw_ovr  inline __cdecl
258 #elif defined (__GNUC__)
259 #  define __mingw_ovr static \
260       __attribute__ ((__unused__)) __inline__ __cdecl
261 #else
262 #  define __mingw_ovr static __cdecl
263 #endif /* __cplusplus */
264 
265 #if defined(__cplusplus) && !defined(_MSC_VER)
266 #define __nullptr nullptr
267 #endif
268 
269 #include "_mingw_mac.h"
270 
271 #endif /* !_INC_MINGW */
272 
273