Added [[noreturn]] attribute everywhere it should be

llvm-svn: 132125
This commit is contained in:
Howard Hinnant 2011-05-26 17:07:32 +00:00
parent 6dc03b36d7
commit 400b244339
3 changed files with 17 additions and 11 deletions

View File

@ -116,8 +116,10 @@ typedef __char32_t char32_t;
#define _LIBCPP_HAS_NO_DECLTYPE #define _LIBCPP_HAS_NO_DECLTYPE
#endif #endif
#if !(__has_feature(cxx_attributes)) #if __has_feature(cxx_attributes)
#define _LIBCPP_HAS_NO_ATTRIBUTES # define _ATTRIBUTE(x) [[x]]
#else
# define _ATTRIBUTE(x) __attribute__ ((x))
#endif #endif
#define _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS #define _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS

View File

@ -105,19 +105,19 @@ public:
typedef void (*unexpected_handler)(); typedef void (*unexpected_handler)();
_LIBCPP_VISIBLE unexpected_handler set_unexpected(unexpected_handler) throw(); _LIBCPP_VISIBLE unexpected_handler set_unexpected(unexpected_handler) throw();
_LIBCPP_VISIBLE unexpected_handler get_unexpected() throw(); _LIBCPP_VISIBLE unexpected_handler get_unexpected() throw();
_LIBCPP_VISIBLE void unexpected(); _ATTRIBUTE(noreturn) _LIBCPP_VISIBLE void unexpected();
typedef void (*terminate_handler)(); typedef void (*terminate_handler)();
_LIBCPP_VISIBLE terminate_handler set_terminate(terminate_handler) throw(); _LIBCPP_VISIBLE terminate_handler set_terminate(terminate_handler) throw();
_LIBCPP_VISIBLE terminate_handler get_terminate() throw(); _LIBCPP_VISIBLE terminate_handler get_terminate() throw();
_LIBCPP_VISIBLE void terminate() __attribute__((__noreturn__)); _ATTRIBUTE(noreturn) _LIBCPP_VISIBLE void terminate() _NOEXCEPT;
_LIBCPP_VISIBLE bool uncaught_exception() throw(); _LIBCPP_VISIBLE bool uncaught_exception() throw();
class exception_ptr; class exception_ptr;
exception_ptr current_exception(); exception_ptr current_exception();
void rethrow_exception(exception_ptr); // noreturn _ATTRIBUTE(noreturn) void rethrow_exception(exception_ptr);
class _LIBCPP_VISIBLE exception_ptr class _LIBCPP_VISIBLE exception_ptr
{ {
@ -141,7 +141,7 @@ public:
{return !(__x == __y);} {return !(__x == __y);}
friend exception_ptr current_exception(); friend exception_ptr current_exception();
friend void rethrow_exception(exception_ptr); // noreturn _ATTRIBUTE(noreturn) friend void rethrow_exception(exception_ptr);
}; };
template<class _E> template<class _E>
@ -172,7 +172,7 @@ public:
virtual ~nested_exception(); virtual ~nested_exception();
// access functions // access functions
void rethrow_nested /*[[noreturn]]*/ () const; _ATTRIBUTE(noreturn) void rethrow_nested() const;
_LIBCPP_INLINE_VISIBILITY exception_ptr nested_ptr() const {return __ptr_;} _LIBCPP_INLINE_VISIBILITY exception_ptr nested_ptr() const {return __ptr_;}
}; };
@ -185,9 +185,10 @@ struct __nested
}; };
template <class _Tp> template <class _Tp>
_ATTRIBUTE(noreturn)
void void
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
throw_with_nested /*[[noreturn]]*/ (_Tp&& __t, typename enable_if< throw_with_nested(_Tp&& __t, typename enable_if<
is_class<typename remove_reference<_Tp>::type>::value && is_class<typename remove_reference<_Tp>::type>::value &&
!is_base_of<nested_exception, typename remove_reference<_Tp>::type>::value !is_base_of<nested_exception, typename remove_reference<_Tp>::type>::value
>::type* = 0) >::type* = 0)
@ -203,9 +204,10 @@ throw_with_nested (_Tp& __t, typename enable_if<
} }
template <class _Tp> template <class _Tp>
_ATTRIBUTE(noreturn)
void void
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
throw_with_nested /*[[noreturn]]*/ (_Tp&& __t, typename enable_if< throw_with_nested(_Tp&& __t, typename enable_if<
!is_class<typename remove_reference<_Tp>::type>::value || !is_class<typename remove_reference<_Tp>::type>::value ||
is_base_of<nested_exception, typename remove_reference<_Tp>::type>::value is_base_of<nested_exception, typename remove_reference<_Tp>::type>::value
>::type* = 0) >::type* = 0)

View File

@ -35,6 +35,7 @@ std::get_unexpected() throw()
return __sync_fetch_and_add(&__unexpected_handler, (std::unexpected_handler)0); return __sync_fetch_and_add(&__unexpected_handler, (std::unexpected_handler)0);
} }
_ATTRIBUTE(noreturn)
void void
std::unexpected() std::unexpected()
{ {
@ -56,7 +57,7 @@ std::get_terminate() throw()
} }
void void
std::terminate() std::terminate() _NOEXCEPT
{ {
#ifndef _LIBCPP_NO_EXCEPTIONS #ifndef _LIBCPP_NO_EXCEPTIONS
try try
@ -156,8 +157,9 @@ nested_exception::~nested_exception()
{ {
} }
_ATTRIBUTE(noreturn)
void void
nested_exception::rethrow_nested /*[[noreturn]]*/ () const nested_exception::rethrow_nested() const
{ {
if (__ptr_ == nullptr) if (__ptr_ == nullptr)
terminate(); terminate();