Several patches for MSC/non-GCC by Amine Khaldi:
* _mingw.h (__MINGW_MSC_PREREQ): Define for MSC by analogy to the
existing __MINGW_GNUC_PREREQ.
(__CRT_INLINE): Define as __inline for MSC.
(__restrict__): Define as __restrict for MSC, or as empty for anything
other than GCC.
(__MINGW_ATTRIB_NORETURN): Define as __declspec(noreturn) for MSC.
(__MINGW_ATTRIB_MALLOC): Define as __declspec(noalias) __declspec(restrict)
for MSC.
(__MINGW_ATTRIB_PURE): Define as empty for MSC.
(__MINGW_ATTRIB_USED): Ditto.
(__MINGW_ATTRIB_CONST): Ditto.
(__MINGW_ATTRIB_DEPRECATE): Define as __declspec(deprecated) for MSC.
(__MINGW_NOTHROW): Define as __declspec(nothrow) for MSC && __cplusplus.
* setjmp.h: Include crtdefs.h instead of _mingw.h which will be included
as a result.
git-svn-id: svn+ssh://svn.code.sf.net/p/mingw-w64/code/trunk@2925 4407c894-4637-0410-b4f5-ada5f102cad1
diff --git a/mingw-w64-headers/crt/ChangeLog b/mingw-w64-headers/crt/ChangeLog
index 9c1dddc..1c7b8ea 100644
--- a/mingw-w64-headers/crt/ChangeLog
+++ b/mingw-w64-headers/crt/ChangeLog
@@ -1,3 +1,22 @@
+2010-07-22 Amine Khaldi <amine.khaldi@reactos.org>
+
+ Several patches for MSC/non-GCC:
+ * _mingw.h (__MINGW_MSC_PREREQ): Define for MSC by analogy to the
+ existing __MINGW_GNUC_PREREQ.
+ (__CRT_INLINE): Define as __inline for MSC.
+ (__restrict__): Define as __restrict for MSC, or as empty for anything
+ other than GCC.
+ (__MINGW_ATTRIB_NORETURN): Define as __declspec(noreturn) for MSC.
+ (__MINGW_ATTRIB_MALLOC): Define as __declspec(noalias) __declspec(restrict)
+ for MSC.
+ (__MINGW_ATTRIB_PURE): Define as empty for MSC.
+ (__MINGW_ATTRIB_USED): Ditto.
+ (__MINGW_ATTRIB_CONST): Ditto.
+ (__MINGW_ATTRIB_DEPRECATE): Define as __declspec(deprecated) for MSC.
+ (__MINGW_NOTHROW): Define as __declspec(nothrow) for MSC && __cplusplus.
+ * setjmp.h: Include crtdefs.h instead of _mingw.h which will be included
+ as a result.
+
2010-07-21 Ozkan Sezer <sezeroz@gmail.com>
* _mingw.h (__MINGW_ATTRIB_UNUSED): Define as __attribute__((unused))
diff --git a/mingw-w64-headers/crt/_mingw.h b/mingw-w64-headers/crt/_mingw.h
index 42f1285..3967e77 100644
--- a/mingw-w64-headers/crt/_mingw.h
+++ b/mingw-w64-headers/crt/_mingw.h
@@ -62,10 +62,19 @@
#define __MINGW_GNUC_PREREQ(major, minor) 0
#endif
+#if defined (_MSC_VER)
+#define __MINGW_MSC_PREREQ(major, minor) \
+ ((major * 100 + minor * 10) >= _MSC_VER)
+#else
+#define __MINGW_MSC_PREREQ(major, minor) 0
+#endif
+
#define USE___UUIDOF 0
#ifdef __cplusplus
# define __CRT_INLINE inline
+#elif defined(_MSC_VER)
+# define __CRT_INLINE __inline
#else
# if ( __MINGW_GNUC_PREREQ(4, 3) && __STDC_VERSION__ >= 199901L)
# define __CRT_INLINE extern inline __attribute__((__gnu_inline__))
@@ -89,9 +98,20 @@
# endif
#endif
+#ifndef __GNUC__
+# ifdef _MSC_VER
+# define __restrict__ __restrict
+# else
+# define __restrict__ /* nothing */
+# endif
+#endif /* !__GNUC__ */
+
#ifdef __GNUC__
#define __MINGW_ATTRIB_NORETURN __attribute__ ((__noreturn__))
#define __MINGW_ATTRIB_CONST __attribute__ ((__const__))
+#elif __MINGW_MSC_PREREQ(12, 0)
+#define __MINGW_ATTRIB_NORETURN __declspec(noreturn)
+#define __MINGW_ATTRIB_CONST
#else
#define __MINGW_ATTRIB_NORETURN
#define __MINGW_ATTRIB_CONST
@@ -100,6 +120,9 @@
#if __MINGW_GNUC_PREREQ (3, 0)
#define __MINGW_ATTRIB_MALLOC __attribute__ ((__malloc__))
#define __MINGW_ATTRIB_PURE __attribute__ ((__pure__))
+#elif __MINGW_MSC_PREREQ(14, 0)
+#define __MINGW_ATTRIB_MALLOC __declspec(noalias) __declspec(restrict)
+#define __MINGW_ATTRIB_PURE
#else
#define __MINGW_ATTRIB_MALLOC
#define __MINGW_ATTRIB_PURE
@@ -123,6 +146,9 @@
#if __MINGW_GNUC_PREREQ (3, 1)
#define __MINGW_ATTRIB_USED __attribute__ ((__used__))
#define __MINGW_ATTRIB_DEPRECATED __attribute__ ((__deprecated__))
+#elif __MINGW_MSC_PREREQ(12, 0)
+#define __MINGW_ATTRIB_USED
+#define __MINGW_ATTRIB_DEPRECATED __declspec(deprecated)
#else
#define __MINGW_ATTRIB_USED __MINGW_ATTRIB_UNUSED
#define __MINGW_ATTRIB_DEPRECATED
@@ -130,6 +156,8 @@
#if __MINGW_GNUC_PREREQ (3, 3)
#define __MINGW_NOTHROW __attribute__ ((__nothrow__))
+#elif __MINGW_MSC_PREREQ(12, 0) && defined (__cplusplus)
+#define __MINGW_NOTHROW __declspec(nothrow)
#else
#define __MINGW_NOTHROW
#endif
diff --git a/mingw-w64-headers/crt/setjmp.h b/mingw-w64-headers/crt/setjmp.h
index 432a616..35ae817 100644
--- a/mingw-w64-headers/crt/setjmp.h
+++ b/mingw-w64-headers/crt/setjmp.h
@@ -6,7 +6,7 @@
#ifndef _INC_SETJMP
#define _INC_SETJMP
-#include <_mingw.h>
+#include <crtdefs.h>
#pragma pack(push,_CRT_PACKING)
@@ -32,7 +32,9 @@
unsigned long UnwindFunc;
unsigned long UnwindData[6];
} _JUMP_BUFFER;
+
#elif defined(__ia64__)
+
typedef _CRT_ALIGN(16) struct _SETJMP_FLOAT128 {
__MINGW_EXTENSION __int64 LowPart;
__MINGW_EXTENSION __int64 HighPart;
@@ -92,7 +94,9 @@
__MINGW_EXTENSION __int64 Preds;
} _JUMP_BUFFER;
+
#elif defined(__x86_64)
+
typedef _CRT_ALIGN(16) struct _SETJMP_FLOAT128 {
__MINGW_EXTENSION unsigned __int64 Part[2];
} SETJMP_FLOAT128;
@@ -124,7 +128,9 @@
SETJMP_FLOAT128 Xmm14;
SETJMP_FLOAT128 Xmm15;
} _JUMP_BUFFER;
+
#endif
+
#ifndef _JMP_BUF_DEFINED
typedef _JBTYPE jmp_buf[_JBLEN];
#define _JMP_BUF_DEFINED