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