From 3d7e738f7262f5c0dad5c8db97283dc58f5ae3c3 Mon Sep 17 00:00:00 2001 From: Danny Smith Date: Fri, 22 Jun 2007 09:19:25 +0000 Subject: [PATCH] * include/_mingw.h (__MINGW_NOTHROW): Define. --- winsup/mingw/ChangeLog | 4 ++++ winsup/mingw/include/_mingw.h | 23 +++++++++++++++++++++-- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/winsup/mingw/ChangeLog b/winsup/mingw/ChangeLog index 0ccf8d1a8..873980478 100644 --- a/winsup/mingw/ChangeLog +++ b/winsup/mingw/ChangeLog @@ -1,3 +1,7 @@ +2007-06-22 Danny Smith + + * include/_mingw.h (__MINGW_NOTHROW): Define. + 2007-06-18 Danny Smith * include/stdio.h (vsnprintf): Remove inline definition. diff --git a/winsup/mingw/include/_mingw.h b/winsup/mingw/include/_mingw.h index 81e81b8ec..bd324da89 100644 --- a/winsup/mingw/include/_mingw.h +++ b/winsup/mingw/include/_mingw.h @@ -23,6 +23,9 @@ #ifndef __MINGW_H #define __MINGW_H +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif /* These are defined by the user (or the compiler) to specify how identifiers are imported from a DLL. @@ -79,8 +82,14 @@ # define _CRTIMP # endif # endif /* __declspec */ -# ifndef __cdecl -# define __cdecl __attribute__ ((__cdecl__)) + +/* + The next two defines can cause problems if user code adds the __cdecl attribute + like so: + void __attribute__ ((__cdecl)) foo(void); +*/ +# ifndef __cdecl +# define __cdecl __attribute__ ((__cdecl__)) # endif # ifndef __stdcall # define __stdcall __attribute__ ((__stdcall__)) @@ -163,6 +172,16 @@ #else #define __MINGW_ATTRIB_DEPRECATED #endif /* GNUC >= 3.1 */ + +#if __MINGW_GNUC_PREREQ (3, 3) +#define __MINGW_NOTHROW __attribute__ ((__nothrow__)) +#else +#define __MINGW_NOTHROW +#endif /* GNUC >= 3.3 */ + + +/* TODO: Mark (almost) all CRT functions as __MINGW_NOTHROW. This will +allow GCC to optimize away some EH unwind code, at least in DW2 case. */ #ifndef __MSVCRT_VERSION__ /* High byte is the major version, low byte is the minor. */