Index: include/__config =================================================================== --- include/__config +++ include/__config @@ -289,8 +289,10 @@ #if __has_feature(cxx_attributes) # define _LIBCPP_NORETURN [[noreturn]] +# define _LIBCPP_NORETURN_GNU __attribute__ ((noreturn)) #else # define _LIBCPP_NORETURN __attribute__ ((noreturn)) +# define _LIBCPP_NORETURN_GNU __attribute__ ((noreturn)) #endif #if !(__has_feature(cxx_lambdas)) @@ -419,6 +421,7 @@ #define _ALIGNAS_TYPE(x) __attribute__((__aligned__(__alignof(x)))) #define _LIBCPP_NORETURN __attribute__((noreturn)) +#define _LIBCPP_NORETURN_GNU __attribute__((noreturn)) #if _GNUC_VER >= 407 #define _LIBCPP_UNDERLYING_TYPE(T) __underlying_type(T) @@ -516,6 +519,7 @@ #define _LIBCPP_HAS_NO_NOEXCEPT #define __alignof__ __alignof #define _LIBCPP_NORETURN __declspec(noreturn) +#define _LIBCPP_NORETURN_GNU __declspec(noreturn) #define _ALIGNAS(x) __declspec(align(x)) #define _LIBCPP_HAS_NO_VARIADICS @@ -535,6 +539,7 @@ #define _ALIGNAS_TYPE(x) __attribute__((__aligned__(__alignof(x)))) #define _ATTRIBUTE(x) __attribute__((x)) #define _LIBCPP_NORETURN __attribute__((noreturn)) +#define _LIBCPP_NORETURN_GNU __attribute__((noreturn)) #define _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS #define _LIBCPP_HAS_NO_NOEXCEPT Index: include/__locale =================================================================== --- include/__locale +++ include/__locale @@ -1183,7 +1183,7 @@ _LIBCPP_EXTERN_TEMPLATE2(class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS codecvt_byname) _LIBCPP_EXTERN_TEMPLATE2(class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS codecvt_byname) -_LIBCPP_NORETURN _LIBCPP_FUNC_VIS void __throw_runtime_error(const char*); +_LIBCPP_NORETURN_GNU _LIBCPP_FUNC_VIS void __throw_runtime_error(const char*); template struct __narrow_to_utf8 Index: include/functional =================================================================== --- include/functional +++ include/functional @@ -1390,7 +1390,7 @@ { }; -_LIBCPP_NORETURN inline _LIBCPP_ALWAYS_INLINE +_LIBCPP_NORETURN_GNU inline _LIBCPP_ALWAYS_INLINE void __throw_bad_function_call() { #ifndef _LIBCPP_NO_EXCEPTIONS Index: include/new =================================================================== --- include/new +++ include/new @@ -128,7 +128,7 @@ virtual const char* what() const _NOEXCEPT; }; -_LIBCPP_NORETURN _LIBCPP_FUNC_VIS void __throw_bad_alloc(); // not in C++ spec +_LIBCPP_NORETURN_GNU _LIBCPP_FUNC_VIS void __throw_bad_alloc(); // not in C++ spec #if defined(_LIBCPP_BUILDING_NEW) || (_LIBCPP_STD_VER > 11) Index: include/stdexcept =================================================================== --- include/stdexcept +++ include/stdexcept @@ -183,9 +183,9 @@ _LIBCPP_BEGIN_NAMESPACE_STD // in the dylib -_LIBCPP_NORETURN _LIBCPP_FUNC_VIS void __throw_runtime_error(const char*); +_LIBCPP_NORETURN_GNU _LIBCPP_FUNC_VIS void __throw_runtime_error(const char*); -_LIBCPP_NORETURN inline _LIBCPP_ALWAYS_INLINE +_LIBCPP_NORETURN_GNU inline _LIBCPP_ALWAYS_INLINE void __throw_logic_error(const char*__msg) { #ifndef _LIBCPP_NO_EXCEPTIONS @@ -196,7 +196,7 @@ #endif } -_LIBCPP_NORETURN inline _LIBCPP_ALWAYS_INLINE +_LIBCPP_NORETURN_GNU inline _LIBCPP_ALWAYS_INLINE void __throw_domain_error(const char*__msg) { #ifndef _LIBCPP_NO_EXCEPTIONS @@ -207,7 +207,7 @@ #endif } -_LIBCPP_NORETURN inline _LIBCPP_ALWAYS_INLINE +_LIBCPP_NORETURN_GNU inline _LIBCPP_ALWAYS_INLINE void __throw_invalid_argument(const char*__msg) { #ifndef _LIBCPP_NO_EXCEPTIONS @@ -218,7 +218,7 @@ #endif } -_LIBCPP_NORETURN inline _LIBCPP_ALWAYS_INLINE +_LIBCPP_NORETURN_GNU inline _LIBCPP_ALWAYS_INLINE void __throw_length_error(const char*__msg) { #ifndef _LIBCPP_NO_EXCEPTIONS @@ -229,7 +229,7 @@ #endif } -_LIBCPP_NORETURN inline _LIBCPP_ALWAYS_INLINE +_LIBCPP_NORETURN_GNU inline _LIBCPP_ALWAYS_INLINE void __throw_out_of_range(const char*__msg) { #ifndef _LIBCPP_NO_EXCEPTIONS @@ -240,7 +240,7 @@ #endif } -_LIBCPP_NORETURN inline _LIBCPP_ALWAYS_INLINE +_LIBCPP_NORETURN_GNU inline _LIBCPP_ALWAYS_INLINE void __throw_range_error(const char*__msg) { #ifndef _LIBCPP_NO_EXCEPTIONS @@ -251,7 +251,7 @@ #endif } -_LIBCPP_NORETURN inline _LIBCPP_ALWAYS_INLINE +_LIBCPP_NORETURN_GNU inline _LIBCPP_ALWAYS_INLINE void __throw_overflow_error(const char*__msg) { #ifndef _LIBCPP_NO_EXCEPTIONS @@ -262,7 +262,7 @@ #endif } -_LIBCPP_NORETURN inline _LIBCPP_ALWAYS_INLINE +_LIBCPP_NORETURN_GNU inline _LIBCPP_ALWAYS_INLINE void __throw_underflow_error(const char*__msg) { #ifndef _LIBCPP_NO_EXCEPTIONS Index: include/system_error =================================================================== --- include/system_error +++ include/system_error @@ -664,7 +664,7 @@ static string __init(const error_code&, string); }; -_LIBCPP_NORETURN _LIBCPP_FUNC_VIS +_LIBCPP_NORETURN_GNU _LIBCPP_FUNC_VIS void __throw_system_error(int ev, const char* what_arg); _LIBCPP_END_NAMESPACE_STD Index: include/typeinfo =================================================================== --- include/typeinfo +++ include/typeinfo @@ -190,7 +190,7 @@ } // std _LIBCPP_BEGIN_NAMESPACE_STD -_LIBCPP_NORETURN inline _LIBCPP_ALWAYS_INLINE +_LIBCPP_NORETURN_GNU inline _LIBCPP_ALWAYS_INLINE void __throw_bad_cast() { #ifndef _LIBCPP_NO_EXCEPTIONS