weimingz retitled this revision from "[libcxx] refactor for throw or assert" to 
"[libcxx] refactor for throw".
weimingz updated the summary for this revision.
weimingz updated this revision to Diff 62470.

http://reviews.llvm.org/D21706

Files:
  include/__functional_03
  include/__locale
  include/array
  include/bitset
  include/complex
  include/deque
  include/exception
  include/experimental/dynarray
  include/experimental/optional
  include/fstream
  include/functional
  include/future
  include/locale
  include/map
  include/memory
  include/regex
  include/string
  include/unordered_map
  include/vector
  src/debug.cpp
  src/experimental/memory_resource.cpp
  src/future.cpp
  src/hash.cpp
  src/ios.cpp
  src/locale.cpp
  src/new.cpp
  src/string.cpp
  src/system_error.cpp
  src/thread.cpp
  src/typeinfo.cpp

Index: src/typeinfo.cpp
===================================================================
--- src/typeinfo.cpp
+++ src/typeinfo.cpp
@@ -52,15 +52,11 @@
   // because bad_cast and bad_typeid are defined in his higher level library
   void __cxxabiv1::__cxa_bad_typeid()
   {
-#ifndef _LIBCPP_NO_EXCEPTIONS
-     throw std::bad_typeid();
-#endif
+     __libcpp_throw(std::bad_typeid());
   }
   void __cxxabiv1::__cxa_bad_cast()
   {
-#ifndef _LIBCPP_NO_EXCEPTIONS
-      throw std::bad_cast();
-#endif
+      __libcpp_throw(std::bad_cast());
   }
 #endif
 
Index: src/thread.cpp
===================================================================
--- src/thread.cpp
+++ src/thread.cpp
@@ -53,10 +53,9 @@
         if (ec == 0)
             __t_ = 0;
     }
-#ifndef _LIBCPP_NO_EXCEPTIONS
     if (ec)
-        throw system_error(error_code(ec, system_category()), "thread::join failed");
-#endif  // _LIBCPP_NO_EXCEPTIONS
+        __libcpp_throw(system_error(error_code(ec, system_category()),
+                                               "thread::join failed"));
 }
 
 void
@@ -69,10 +68,9 @@
         if (ec == 0)
             __t_ = 0;
     }
-#ifndef _LIBCPP_NO_EXCEPTIONS
     if (ec)
-        throw system_error(error_code(ec, system_category()), "thread::detach failed");
-#endif  // _LIBCPP_NO_EXCEPTIONS
+        __libcpp_throw(system_error(error_code(ec, system_category()),
+                                               "thread::detach failed"));
 }
 
 unsigned
Index: src/system_error.cpp
===================================================================
--- src/system_error.cpp
+++ src/system_error.cpp
@@ -253,12 +253,7 @@
 void
 __throw_system_error(int ev, const char* what_arg)
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    throw system_error(error_code(ev, system_category()), what_arg);
-#else
-    (void)ev;
-    (void)what_arg;
-#endif
+    __libcpp_throw(system_error(error_code(ev, system_category()), what_arg));
 }
 
 _LIBCPP_END_NAMESPACE_STD
Index: src/string.cpp
===================================================================
--- src/string.cpp
+++ src/string.cpp
@@ -32,28 +32,16 @@
 namespace
 {
 
-template<typename T>
-inline
-void throw_helper( const string& msg )
-{
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    throw T( msg );
-#else
-    fprintf(stderr, "%s\n", msg.c_str());
-    abort();
-#endif
-}
-
 inline
 void throw_from_string_out_of_range( const string& func )
 {
-    throw_helper<out_of_range>(func + ": out of range");
+    __libcpp_throw(out_of_range(func + ": out of range"));
 }
 
 inline
 void throw_from_string_invalid_arg( const string& func )
 {
-    throw_helper<invalid_argument>(func + ": no conversion");
+    __libcpp_throw(invalid_argument(func + ": no conversion"));
 }
 
 // as_integer
Index: src/new.cpp
===================================================================
--- src/new.cpp
+++ src/new.cpp
@@ -56,7 +56,7 @@
             nh();
         else
 #ifndef _LIBCPP_NO_EXCEPTIONS
-            throw std::bad_alloc();
+            __libcpp_throw(std::bad_alloc());
 #else
             break;
 #endif
Index: src/locale.cpp
===================================================================
--- src/locale.cpp
+++ src/locale.cpp
@@ -436,10 +436,8 @@
 const locale::facet*
 locale::__imp::use_facet(long id) const
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
     if (!has_facet(id))
-        throw bad_cast();
-#endif  // _LIBCPP_NO_EXCEPTIONS
+        __libcpp_throw(bad_cast());
     return facets_[static_cast<size_t>(id)];
 }
 
@@ -528,6 +526,7 @@
 #else  // _LIBCPP_NO_EXCEPTIONS
     : __locale_(new __imp(*other.__locale_, name, c))
 #endif
+
 {
     __locale_->__add_shared();
 }
@@ -646,22 +645,18 @@
     : collate<char>(refs),
       __l(newlocale(LC_ALL_MASK, n, 0))
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
     if (__l == 0)
-        throw runtime_error("collate_byname<char>::collate_byname"
-                            " failed to construct for " + string(n));
-#endif  // _LIBCPP_NO_EXCEPTIONS
+        __libcpp_throw(runtime_error("collate_byname<char>::collate_byname"
+                            " failed to construct for " + string(n)));
 }
 
 collate_byname<char>::collate_byname(const string& name, size_t refs)
     : collate<char>(refs),
       __l(newlocale(LC_ALL_MASK, name.c_str(), 0))
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
     if (__l == 0)
-        throw runtime_error("collate_byname<char>::collate_byname"
-                            " failed to construct for " + name);
-#endif  // _LIBCPP_NO_EXCEPTIONS
+        __libcpp_throw(runtime_error("collate_byname<char>::collate_byname"
+                            " failed to construct for " + name));
 }
 
 collate_byname<char>::~collate_byname()
@@ -698,22 +693,18 @@
     : collate<wchar_t>(refs),
       __l(newlocale(LC_ALL_MASK, n, 0))
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
     if (__l == 0)
-        throw runtime_error("collate_byname<wchar_t>::collate_byname(size_t refs)"
-                            " failed to construct for " + string(n));
-#endif  // _LIBCPP_NO_EXCEPTIONS
+        __libcpp_throw(runtime_error("collate_byname<wchar_t>::collate_byname("
+                          "size_t refs) failed to construct for " + string(n)));
 }
 
 collate_byname<wchar_t>::collate_byname(const string& name, size_t refs)
     : collate<wchar_t>(refs),
       __l(newlocale(LC_ALL_MASK, name.c_str(), 0))
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
     if (__l == 0)
-        throw runtime_error("collate_byname<wchar_t>::collate_byname(size_t refs)"
-                            " failed to construct for " + name);
-#endif  // _LIBCPP_NO_EXCEPTIONS
+        __libcpp_throw(runtime_error("collate_byname<wchar_t>::collate_byname"
+                          "(size_t refs) failed to construct for " + name));
 }
 
 collate_byname<wchar_t>::~collate_byname()
@@ -1172,22 +1163,18 @@
     : ctype<char>(0, false, refs),
       __l(newlocale(LC_ALL_MASK, name, 0))
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
     if (__l == 0)
-        throw runtime_error("ctype_byname<char>::ctype_byname"
-                            " failed to construct for " + string(name));
-#endif  // _LIBCPP_NO_EXCEPTIONS
+        __libcpp_throw(runtime_error("ctype_byname<char>::ctype_byname"
+                            " failed to construct for " + string(name)));
 }
 
 ctype_byname<char>::ctype_byname(const string& name, size_t refs)
     : ctype<char>(0, false, refs),
       __l(newlocale(LC_ALL_MASK, name.c_str(), 0))
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
     if (__l == 0)
-        throw runtime_error("ctype_byname<char>::ctype_byname"
-                            " failed to construct for " + name);
-#endif  // _LIBCPP_NO_EXCEPTIONS
+        __libcpp_throw(runtime_error("ctype_byname<char>::ctype_byname"
+                            " failed to construct for " + name));
 }
 
 ctype_byname<char>::~ctype_byname()
@@ -1229,22 +1216,18 @@
     : ctype<wchar_t>(refs),
       __l(newlocale(LC_ALL_MASK, name, 0))
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
     if (__l == 0)
-        throw runtime_error("ctype_byname<wchar_t>::ctype_byname"
-                            " failed to construct for " + string(name));
-#endif  // _LIBCPP_NO_EXCEPTIONS
+        __libcpp_throw(runtime_error("ctype_byname<wchar_t>::ctype_byname"
+                            " failed to construct for " + string(name)));
 }
 
 ctype_byname<wchar_t>::ctype_byname(const string& name, size_t refs)
     : ctype<wchar_t>(refs),
       __l(newlocale(LC_ALL_MASK, name.c_str(), 0))
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
     if (__l == 0)
-        throw runtime_error("ctype_byname<wchar_t>::ctype_byname"
-                            " failed to construct for " + name);
-#endif  // _LIBCPP_NO_EXCEPTIONS
+        __libcpp_throw(runtime_error("ctype_byname<wchar_t>::ctype_byname"
+                            " failed to construct for " + name));
 }
 
 ctype_byname<wchar_t>::~ctype_byname()
@@ -1504,11 +1487,10 @@
     : locale::facet(refs),
       __l(newlocale(LC_ALL_MASK, nm, 0))
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
     if (__l == 0)
-        throw runtime_error("codecvt_byname<wchar_t, char, mbstate_t>::codecvt_byname"
-                            " failed to construct for " + string(nm));
-#endif  // _LIBCPP_NO_EXCEPTIONS
+        __libcpp_throw(runtime_error("codecvt_byname<wchar_t, char, mbstate_t>"
+                                     "::codecvt_byname failed to construct "
+                                     "for " + string(nm)));
 }
 
 codecvt<wchar_t, char, mbstate_t>::~codecvt()
@@ -4257,11 +4239,10 @@
     if (strcmp(nm, "C") != 0)
     {
         __locale_unique_ptr loc(newlocale(LC_ALL_MASK, nm, 0), freelocale);
-#ifndef _LIBCPP_NO_EXCEPTIONS
         if (loc == nullptr)
-            throw runtime_error("numpunct_byname<char>::numpunct_byname"
-                                " failed to construct for " + string(nm));
-#endif  // _LIBCPP_NO_EXCEPTIONS
+            __libcpp_throw(runtime_error("numpunct_byname<char>::"
+                                         "numpunct_byname  failed to construct "
+                                         "for " + string(nm)));
         lconv* lc = __libcpp_localeconv_l(loc.get());
         if (*lc->decimal_point)
             __decimal_point_ = *lc->decimal_point;
@@ -4296,11 +4277,10 @@
     if (strcmp(nm, "C") != 0)
     {
         __locale_unique_ptr loc(newlocale(LC_ALL_MASK, nm, 0), freelocale);
-#ifndef _LIBCPP_NO_EXCEPTIONS
         if (loc == nullptr)
-            throw runtime_error("numpunct_byname<char>::numpunct_byname"
-                                " failed to construct for " + string(nm));
-#endif  // _LIBCPP_NO_EXCEPTIONS
+            __libcpp_throw(runtime_error("numpunct_byname<char>::numpunct_"
+                                         "byname failed to construct for " +
+                                         string(nm)));
         lconv* lc = __libcpp_localeconv_l(loc.get());
         if (*lc->decimal_point)
             __decimal_point_ = *lc->decimal_point;
@@ -4703,21 +4683,17 @@
 __time_get::__time_get(const char* nm)
     : __loc_(newlocale(LC_ALL_MASK, nm, 0))
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
     if (__loc_ == 0)
-        throw runtime_error("time_get_byname"
-                            " failed to construct for " + string(nm));
-#endif  // _LIBCPP_NO_EXCEPTIONS
+        __libcpp_throw(runtime_error("time_get_byname"
+                            " failed to construct for " + string(nm)));
 }
 
 __time_get::__time_get(const string& nm)
     : __loc_(newlocale(LC_ALL_MASK, nm.c_str(), 0))
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
     if (__loc_ == 0)
-        throw runtime_error("time_get_byname"
-                            " failed to construct for " + nm);
-#endif  // _LIBCPP_NO_EXCEPTIONS
+        __libcpp_throw(runtime_error("time_get_byname"
+                            " failed to construct for " + nm));
 }
 
 __time_get::~__time_get()
@@ -5363,21 +5339,17 @@
 __time_put::__time_put(const char* nm)
     : __loc_(newlocale(LC_ALL_MASK, nm, 0))
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
     if (__loc_ == 0)
-        throw runtime_error("time_put_byname"
-                            " failed to construct for " + string(nm));
-#endif  // _LIBCPP_NO_EXCEPTIONS
+        __libcpp_throw(runtime_error("time_put_byname"
+                            " failed to construct for " + string(nm)));
 }
 
 __time_put::__time_put(const string& nm)
     : __loc_(newlocale(LC_ALL_MASK, nm.c_str(), 0))
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
     if (__loc_ == 0)
-        throw runtime_error("time_put_byname"
-                            " failed to construct for " + nm);
-#endif  // _LIBCPP_NO_EXCEPTIONS
+        __libcpp_throw(runtime_error("time_put_byname"
+                            " failed to construct for " + nm));
 }
 
 __time_put::~__time_put()
@@ -5792,11 +5764,9 @@
 {
     typedef moneypunct<char, false> base;
     __locale_unique_ptr loc(newlocale(LC_ALL_MASK, nm, 0), freelocale);
-#ifndef _LIBCPP_NO_EXCEPTIONS
     if (loc == nullptr)
-        throw runtime_error("moneypunct_byname"
-                            " failed to construct for " + string(nm));
-#endif  // _LIBCPP_NO_EXCEPTIONS
+        __libcpp_throw(runtime_error("moneypunct_byname"
+                            " failed to construct for " + string(nm)));
     lconv* lc = __libcpp_localeconv_l(loc.get());
     if (*lc->mon_decimal_point)
         __decimal_point_ = *lc->mon_decimal_point;
@@ -5836,11 +5806,9 @@
 {
     typedef moneypunct<char, true> base;
     __locale_unique_ptr loc(newlocale(LC_ALL_MASK, nm, 0), freelocale);
-#ifndef _LIBCPP_NO_EXCEPTIONS
     if (loc == nullptr)
-        throw runtime_error("moneypunct_byname"
-                            " failed to construct for " + string(nm));
-#endif  // _LIBCPP_NO_EXCEPTIONS
+        __libcpp_throw(runtime_error("moneypunct_byname"
+                            " failed to construct for " + string(nm)));
     lconv* lc = __libcpp_localeconv_l(loc.get());
     if (*lc->mon_decimal_point)
         __decimal_point_ = *lc->mon_decimal_point;
@@ -5897,11 +5865,9 @@
 {
     typedef moneypunct<wchar_t, false> base;
     __locale_unique_ptr loc(newlocale(LC_ALL_MASK, nm, 0), freelocale);
-#ifndef _LIBCPP_NO_EXCEPTIONS
     if (loc == nullptr)
-        throw runtime_error("moneypunct_byname"
-                            " failed to construct for " + string(nm));
-#endif  // _LIBCPP_NO_EXCEPTIONS
+        __libcpp_throw(runtime_error("moneypunct_byname"
+                            " failed to construct for " + string(nm)));
     lconv* lc = __libcpp_localeconv_l(loc.get());
     if (*lc->mon_decimal_point)
         __decimal_point_ = static_cast<wchar_t>(*lc->mon_decimal_point);
@@ -5964,11 +5930,9 @@
 {
     typedef moneypunct<wchar_t, true> base;
     __locale_unique_ptr loc(newlocale(LC_ALL_MASK, nm, 0), freelocale);
-#ifndef _LIBCPP_NO_EXCEPTIONS
     if (loc == nullptr)
-        throw runtime_error("moneypunct_byname"
-                            " failed to construct for " + string(nm));
-#endif  // _LIBCPP_NO_EXCEPTIONS
+        __libcpp_throw(runtime_error("moneypunct_byname"
+                            " failed to construct for " + string(nm)));
     lconv* lc = __libcpp_localeconv_l(loc.get());
     if (*lc->mon_decimal_point)
         __decimal_point_ = static_cast<wchar_t>(*lc->mon_decimal_point);
@@ -6046,11 +6010,8 @@
 
 void __throw_runtime_error(const char* msg)
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    throw runtime_error(msg);
-#else
+    __libcpp_throw(runtime_error(msg));
     (void)msg;
-#endif
 }
 
 template class collate<char>;
Index: src/ios.cpp
===================================================================
--- src/ios.cpp
+++ src/ios.cpp
@@ -266,10 +266,8 @@
         __rdstate_ = state;
     else
         __rdstate_ = state | badbit;
-#ifndef _LIBCPP_NO_EXCEPTIONS
     if (((state | (__rdbuf_ ? goodbit : badbit)) & __exceptions_) != 0)
-        throw failure("ios_base::clear");
-#endif  // _LIBCPP_NO_EXCEPTIONS
+        __libcpp_throw(failure("ios_base::clear"));
 }
 
 // init
@@ -309,35 +307,27 @@
     {
         size_t newesize = sizeof(event_callback) * rhs.__event_size_;
         new_callbacks.reset(static_cast<event_callback*>(malloc(newesize)));
-#ifndef _LIBCPP_NO_EXCEPTIONS
         if (!new_callbacks)
-            throw bad_alloc();
-#endif  // _LIBCPP_NO_EXCEPTIONS
+            __libcpp_throw(bad_alloc());
 
         size_t newisize = sizeof(int) * rhs.__event_size_;
         new_ints.reset(static_cast<int *>(malloc(newisize)));
-#ifndef _LIBCPP_NO_EXCEPTIONS
         if (!new_ints)
-            throw bad_alloc();
-#endif  // _LIBCPP_NO_EXCEPTIONS
+            __libcpp_throw(bad_alloc());
     }
     if (__iarray_cap_ < rhs.__iarray_size_)
     {
         size_t newsize = sizeof(long) * rhs.__iarray_size_;
         new_longs.reset(static_cast<long*>(malloc(newsize)));
-#ifndef _LIBCPP_NO_EXCEPTIONS
         if (!new_longs)
-            throw bad_alloc();
-#endif  // _LIBCPP_NO_EXCEPTIONS
+            __libcpp_throw(bad_alloc());
     }
     if (__parray_cap_ < rhs.__parray_size_)
     {
         size_t newsize = sizeof(void*) * rhs.__parray_size_;
         new_pointers.reset(static_cast<void**>(malloc(newsize)));
-#ifndef _LIBCPP_NO_EXCEPTIONS
         if (!new_pointers)
-            throw bad_alloc();
-#endif  // _LIBCPP_NO_EXCEPTIONS
+            __libcpp_throw(bad_alloc());
     }
     // Got everything we need.  Copy everything but __rdstate_, __rdbuf_ and __exceptions_
     __fmtflags_ = rhs.__fmtflags_;
Index: src/hash.cpp
===================================================================
--- src/hash.cpp
+++ src/hash.cpp
@@ -154,12 +154,8 @@
 typename enable_if<_Sz == 4, void>::type
 __check_for_overflow(size_t N)
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
     if (N > 0xFFFFFFFB)
-        throw overflow_error("__next_prime overflow");
-#else
-    (void)N;
-#endif
+        __libcpp_throw(overflow_error("__next_prime overflow"));
 }
 
 template <size_t _Sz = sizeof(size_t)>
@@ -167,12 +163,8 @@
 typename enable_if<_Sz == 8, void>::type
 __check_for_overflow(size_t N)
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
     if (N > 0xFFFFFFFFFFFFFFC5ull)
-        throw overflow_error("__next_prime overflow");
-#else
-    (void)N;
-#endif
+        __libcpp_throw(overflow_error("__next_prime overflow"));
 }
 
 size_t
Index: src/future.cpp
===================================================================
--- src/future.cpp
+++ src/future.cpp
@@ -92,10 +92,8 @@
 __assoc_sub_state::set_value()
 {
     unique_lock<mutex> __lk(__mut_);
-#ifndef _LIBCPP_NO_EXCEPTIONS
     if (__has_value())
-        throw future_error(make_error_code(future_errc::promise_already_satisfied));
-#endif
+        __libcpp_throw(future_error(make_error_code(future_errc::promise_already_satisfied)));
     __state_ |= __constructed | ready;
     __cv_.notify_all();
 }
@@ -104,10 +102,8 @@
 __assoc_sub_state::set_value_at_thread_exit()
 {
     unique_lock<mutex> __lk(__mut_);
-#ifndef _LIBCPP_NO_EXCEPTIONS
     if (__has_value())
-        throw future_error(make_error_code(future_errc::promise_already_satisfied));
-#endif
+        __libcpp_throw(future_error(make_error_code(future_errc::promise_already_satisfied)));
     __state_ |= __constructed;
     __thread_local_data()->__make_ready_at_thread_exit(this);
 }
@@ -116,10 +112,8 @@
 __assoc_sub_state::set_exception(exception_ptr __p)
 {
     unique_lock<mutex> __lk(__mut_);
-#ifndef _LIBCPP_NO_EXCEPTIONS
     if (__has_value())
-        throw future_error(make_error_code(future_errc::promise_already_satisfied));
-#endif
+        __libcpp_throw(future_error(make_error_code(future_errc::promise_already_satisfied)));
     __exception_ = __p;
     __state_ |= ready;
     __cv_.notify_all();
@@ -129,10 +123,8 @@
 __assoc_sub_state::set_exception_at_thread_exit(exception_ptr __p)
 {
     unique_lock<mutex> __lk(__mut_);
-#ifndef _LIBCPP_NO_EXCEPTIONS
     if (__has_value())
-        throw future_error(make_error_code(future_errc::promise_already_satisfied));
-#endif
+        __libcxx_throw(future_error(make_error_code(future_errc::promise_already_satisfied)));
     __exception_ = __p;
     __thread_local_data()->__make_ready_at_thread_exit(this);
 }
@@ -181,18 +173,14 @@
 void
 __assoc_sub_state::__execute()
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    throw future_error(make_error_code(future_errc::no_state));
-#endif
+    __libcpp_throw(future_error(make_error_code(future_errc::no_state)));
 }
 
 future<void>::future(__assoc_sub_state* __state)
     : __state_(__state)
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
     if (__state_->__has_future_attached())
-        throw future_error(make_error_code(future_errc::future_already_retrieved));
-#endif
+        __libcpp_throw(future_error(make_error_code(future_errc::future_already_retrieved)));
     __state_->__add_shared();
     __state_->__set_future_attached();
 }
@@ -234,50 +222,40 @@
 future<void>
 promise<void>::get_future()
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
     if (__state_ == nullptr)
-        throw future_error(make_error_code(future_errc::no_state));
-#endif
+        __libcpp_throw(future_error(make_error_code(future_errc::no_state)));
     return future<void>(__state_);
 }
 
 void
 promise<void>::set_value()
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
     if (__state_ == nullptr)
-        throw future_error(make_error_code(future_errc::no_state));
-#endif
+        __libcpp_throw(future_error(make_error_code(future_errc::no_state)));
     __state_->set_value();
 }
 
 void
 promise<void>::set_exception(exception_ptr __p)
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
     if (__state_ == nullptr)
-        throw future_error(make_error_code(future_errc::no_state));
-#endif
+        __libcpp_throw(future_error(make_error_code(future_errc::no_state)));
     __state_->set_exception(__p);
 }
 
 void
 promise<void>::set_value_at_thread_exit()
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
     if (__state_ == nullptr)
-        throw future_error(make_error_code(future_errc::no_state));
-#endif
+        __libcpp_throw(future_error(make_error_code(future_errc::no_state)));
     __state_->set_value_at_thread_exit();
 }
 
 void
 promise<void>::set_exception_at_thread_exit(exception_ptr __p)
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
     if (__state_ == nullptr)
-        throw future_error(make_error_code(future_errc::no_state));
-#endif
+        __libcpp_throw(future_error(make_error_code(future_errc::no_state)));
     __state_->set_exception_at_thread_exit(__p);
 }
 
Index: src/experimental/memory_resource.cpp
===================================================================
--- src/experimental/memory_resource.cpp
+++ src/experimental/memory_resource.cpp
@@ -50,11 +50,7 @@
 
 protected:
     virtual void* do_allocate(size_t, size_t) {
-#ifndef _LIBCPP_NO_EXCEPTIONS
-        throw std::bad_alloc();
-#else
-        abort();
-#endif
+        __libcpp_throw(std::bad_alloc());
     }
     virtual void do_deallocate(void *, size_t, size_t) {}
     virtual bool do_is_equal(memory_resource const & __other) const _NOEXCEPT
@@ -136,4 +132,4 @@
     return __default_memory_resource(true, __new_res);
 }
 
-_LIBCPP_END_NAMESPACE_LFTS_PMR
\ No newline at end of file
+_LIBCPP_END_NAMESPACE_LFTS_PMR
Index: src/debug.cpp
===================================================================
--- src/debug.cpp
+++ src/debug.cpp
@@ -152,11 +152,7 @@
         size_t nc = __next_prime(2*static_cast<size_t>(__cend_ - __cbeg_) + 1);
         __c_node** cbeg = static_cast<__c_node**>(calloc(nc, sizeof(void*)));
         if (cbeg == nullptr)
-#ifndef _LIBCPP_NO_EXCEPTIONS
-            throw bad_alloc();
-#else
-            abort();
-#endif
+            __libcpp_throw(bad_alloc());
         for (__c_node** p = __cbeg_; p != __cend_; ++p)
         {
             __c_node* q = *p;
@@ -178,11 +174,7 @@
     __c_node* r = __cbeg_[hc] =
       static_cast<__c_node*>(malloc(sizeof(__c_node)));
     if (__cbeg_[hc] == nullptr)
-#ifndef _LIBCPP_NO_EXCEPTIONS
-        throw bad_alloc();
-#else
-        abort();
-#endif
+        __libcpp_throw(bad_alloc());
     r->__c_ = __c;
     r->__next_ = p;
     ++__csz_;
@@ -475,11 +467,7 @@
         __i_node** beg =
            static_cast<__i_node**>(malloc(nc * sizeof(__i_node*)));
         if (beg == nullptr)
-#ifndef _LIBCPP_NO_EXCEPTIONS
-            throw bad_alloc();
-#else
-            abort();
-#endif
+            __libcpp_throw(bad_alloc());
         if (nc > 1)
             memcpy(beg, beg_, nc/2*sizeof(__i_node*));
         free(beg_);
@@ -501,11 +489,7 @@
         size_t nc = __next_prime(2*static_cast<size_t>(__iend_ - __ibeg_) + 1);
         __i_node** ibeg = static_cast<__i_node**>(calloc(nc, sizeof(void*)));
         if (ibeg == nullptr)
-#ifndef _LIBCPP_NO_EXCEPTIONS
-            throw bad_alloc();
-#else
-            abort();
-#endif
+            __libcpp_throw(bad_alloc());
         for (__i_node** p = __ibeg_; p != __iend_; ++p)
         {
             __i_node* q = *p;
@@ -527,11 +511,7 @@
     __i_node* r = __ibeg_[hi] =
       static_cast<__i_node*>(malloc(sizeof(__i_node)));
     if (r == nullptr)
-#ifndef _LIBCPP_NO_EXCEPTIONS
-        throw bad_alloc();
-#else
-        abort();
-#endif
+        __libcpp_throw(bad_alloc());
     ::new(r) __i_node(__i, p, nullptr);
     ++__isz_;
     return r;
Index: include/vector
===================================================================
--- include/vector
+++ include/vector
@@ -298,22 +298,14 @@
 void
 __vector_base_common<__b>::__throw_length_error() const
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    throw length_error("vector");
-#else
-    assert(!"vector length_error");
-#endif
+    __libcpp_throw(length_error("vector"));
 }
 
 template <bool __b>
 void
 __vector_base_common<__b>::__throw_out_of_range() const
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    throw out_of_range("vector");
-#else
-    assert(!"vector out_of_range");
-#endif
+    __libcpp_throw(out_of_range("vector"));
 }
 
 #ifdef _LIBCPP_MSVC
Index: include/unordered_map
===================================================================
--- include/unordered_map
+++ include/unordered_map
@@ -1440,10 +1440,8 @@
 unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::at(const key_type& __k)
 {
     iterator __i = find(__k);
-#ifndef _LIBCPP_NO_EXCEPTIONS
     if (__i == end())
-        throw out_of_range("unordered_map::at: key not found");
-#endif  // _LIBCPP_NO_EXCEPTIONS
+        __libcpp_throw(out_of_range("unordered_map::at: key not found"));
     return __i->second;
 }
 
@@ -1452,10 +1450,8 @@
 unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::at(const key_type& __k) const
 {
     const_iterator __i = find(__k);
-#ifndef _LIBCPP_NO_EXCEPTIONS
     if (__i == end())
-        throw out_of_range("unordered_map::at: key not found");
-#endif  // _LIBCPP_NO_EXCEPTIONS
+        __libcpp_throw(out_of_range("unordered_map::at: key not found")));
     return __i->second;
 }
 
Index: include/string
===================================================================
--- include/string
+++ include/string
@@ -1177,22 +1177,14 @@
 void
 __basic_string_common<__b>::__throw_length_error() const
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    throw length_error("basic_string");
-#else
-    assert(!"basic_string length_error");
-#endif
+    __libcpp_throw(length_error("basic_string"));
 }
 
 template <bool __b>
 void
 __basic_string_common<__b>::__throw_out_of_range() const
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    throw out_of_range("basic_string");
-#else
-    assert(!"basic_string out_of_range");
-#endif
+    __libcpp_throw(out_of_range("basic_string"));
 }
 
 #ifdef _LIBCPP_MSVC
Index: include/regex
===================================================================
--- include/regex
+++ include/regex
@@ -960,11 +960,7 @@
 _LIBCPP_ALWAYS_INLINE
 void __throw_regex_error()
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    throw regex_error(_Ev);
-#else
-    assert(!"regex_error");
-#endif
+    __libcpp_throw(regex_error(_Ev));
 }
 
 template <class _CharT>
Index: include/memory
===================================================================
--- include/memory
+++ include/memory
@@ -610,9 +610,6 @@
 #include <tuple>
 #include <stdexcept>
 #include <cstring>
-#if defined(_LIBCPP_NO_EXCEPTIONS)
-    #include <cassert>
-#endif
 
 #if !defined(_LIBCPP_HAS_NO_ATOMIC_HEADER)
 #  include <atomic>
@@ -5335,11 +5332,7 @@
       __cntrl_(__r.__cntrl_ ? __r.__cntrl_->lock() : __r.__cntrl_)
 {
     if (__cntrl_ == 0)
-#ifndef _LIBCPP_NO_EXCEPTIONS
-        throw bad_weak_ptr();
-#else
-        assert(!"bad_weak_ptr");
-#endif
+        __libcpp_throw(bad_weak_ptr());
 }
 
 template<class _Tp>
Index: include/map
===================================================================
--- include/map
+++ include/map
@@ -1442,10 +1442,8 @@
 {
     __node_base_pointer __parent;
     __node_base_pointer& __child = __find_equal_key(__parent, __k);
-#ifndef _LIBCPP_NO_EXCEPTIONS
     if (__child == nullptr)
-        throw out_of_range("map::at:  key not found");
-#endif  // _LIBCPP_NO_EXCEPTIONS
+        __libcpp_throw(out_of_range("map::at:  key not found"));
     return static_cast<__node_pointer>(__child)->__value_.__cc.second;
 }
 
@@ -1455,10 +1453,8 @@
 {
     __node_base_pointer __parent;
     __node_base_pointer __child = __find_equal_key(__parent, __k);
-#ifndef _LIBCPP_NO_EXCEPTIONS
     if (__child == nullptr)
-        throw out_of_range("map::at:  key not found");
-#endif  // _LIBCPP_NO_EXCEPTIONS
+        __libcpp_throw(out_of_range("map::at:  key not found"));
     return static_cast<__node_pointer>(__child)->__value_.__cc.second;
 }
 
Index: include/locale
===================================================================
--- include/locale
+++ include/locale
@@ -3701,10 +3701,8 @@
         if (__r == codecvt_base::ok)
             return __ws;
     }
-#ifndef _LIBCPP_NO_EXCEPTIONS
     if (__wide_err_string_.empty())
-        throw range_error("wstring_convert: from_bytes error");
-#endif  // _LIBCPP_NO_EXCEPTIONS
+        __libcpp_throw(range_error("wstring_convert: from_bytes error"));
     return __wide_err_string_;
 }
 
@@ -3790,10 +3788,8 @@
                 return __bs;
         }
     }
-#ifndef _LIBCPP_NO_EXCEPTIONS
     if (__byte_err_string_.empty())
-        throw range_error("wstring_convert: to_bytes error");
-#endif  // _LIBCPP_NO_EXCEPTIONS
+        __libcpp_throw(range_error("wstring_convert: to_bytes error"));
     return __byte_err_string_;
 }
 
Index: include/future
===================================================================
--- include/future
+++ include/future
@@ -515,11 +515,7 @@
 inline _LIBCPP_ALWAYS_INLINE
 void __throw_future_error(future_errc _Ev)
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    throw future_error(make_error_code(_Ev));
-#else
-    assert(!"future_error");
-#endif
+    __libcpp_throw(future_error(make_error_code(_Ev)));
 }
 
 class _LIBCPP_TYPE_VIS __assoc_sub_state
Index: include/functional
===================================================================
--- include/functional
+++ include/functional
@@ -1891,10 +1891,8 @@
 _Rp
 function<_Rp(_ArgTypes...)>::operator()(_ArgTypes... __arg) const
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
     if (__f_ == 0)
-        throw bad_function_call();
-#endif  // _LIBCPP_NO_EXCEPTIONS
+        __libcpp_throw(bad_function_call());
     return (*__f_)(_VSTD::forward<_ArgTypes>(__arg)...);
 }
 
Index: include/fstream
===================================================================
--- include/fstream
+++ include/fstream
@@ -618,10 +618,8 @@
             size_t __nr = fread((void*)__extbufnext_, 1, __nmemb, __file_);
             if (__nr != 0)
             {
-#ifndef _LIBCPP_NO_EXCEPTIONS
                 if (!__cv_)
-                    throw bad_cast();
-#endif
+                    __libcpp_throw(bad_cast());
                 __extbufend_ = __extbufnext_ + __nr;
                 char_type*  __inext;
                 __r = __cv_->in(__st_, __extbuf_, __extbufend_, __extbufnext_,
@@ -700,10 +698,8 @@
             codecvt_base::result __r;
             do
             {
-#ifndef _LIBCPP_NO_EXCEPTIONS
                 if (!__cv_)
-                    throw bad_cast();
-#endif
+                    __libcpp_throw(bad_cast());
                 const char_type* __e;
                 __r = __cv_->out(__st_, this->pbase(), this->pptr(), __e,
                                         __extbuf_, __extbuf_ + __ebs_, __extbe);
@@ -793,10 +789,8 @@
 basic_filebuf<_CharT, _Traits>::seekoff(off_type __off, ios_base::seekdir __way,
                                         ios_base::openmode)
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
     if (!__cv_)
-        throw bad_cast();
-#endif
+        __libcpp_throw(bad_cast());
     int __width = __cv_->encoding();
     if (__file_ == 0 || (__width <= 0 && __off != 0) || sync())
         return pos_type(off_type(-1));
@@ -852,10 +846,8 @@
 {
     if (__file_ == 0)
         return 0;
-#ifndef _LIBCPP_NO_EXCEPTIONS
     if (!__cv_)
-        throw bad_cast();
-#endif
+        __libcpp_throw(bad_cast());
     if (__cm_ & ios_base::out)
     {
         if (this->pptr() != this->pbase())
Index: include/experimental/optional
===================================================================
--- include/experimental/optional
+++ include/experimental/optional
@@ -517,11 +517,7 @@
     constexpr value_type const& value() const
     {
         if (!this->__engaged_)
-#ifndef _LIBCPP_NO_EXCEPTIONS
-            throw bad_optional_access();
-#else
-            assert(!"bad optional access");
-#endif
+            __libcpp_throw(bad_optional_access());
         return this->__val_;
     }
 
@@ -529,11 +525,7 @@
     value_type& value()
     {
         if (!this->__engaged_)
-#ifndef _LIBCPP_NO_EXCEPTIONS
-            throw bad_optional_access();
-#else
-            assert(!"bad optional access");
-#endif
+            __libcpp_throw(bad_optional_access());
         return this->__val_;
     }
 
Index: include/experimental/dynarray
===================================================================
--- include/experimental/dynarray
+++ include/experimental/dynarray
@@ -106,10 +106,6 @@
 
 #include <__undef___deallocate>
 
-#if defined(_LIBCPP_NO_EXCEPTIONS)
-    #include <cassert>
-#endif
-
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #pragma GCC system_header
 #endif
@@ -143,11 +139,7 @@
     {
         if ( numeric_limits<size_t>::max() / sizeof (value_type) <= count )
         {
-#ifndef _LIBCPP_NO_EXCEPTIONS
-            throw bad_array_length();
-#else
-            assert(!"dynarray::allocation");
-#endif
+            __libcpp_throw(bad_array_length());
         }
         return static_cast<value_type *> (_VSTD::__allocate (sizeof(value_type) * count));
     }
@@ -284,11 +276,7 @@
 {
     if (__n >= __size_)
     {
-#ifndef _LIBCPP_NO_EXCEPTIONS
-        throw out_of_range("dynarray::at");
-#else
-        assert(!"dynarray::at out_of_range");
-#endif
+        __libcpp_throw(out_of_range("dynarray::at"));
     }
     return data()[__n];
 }
@@ -300,11 +288,7 @@
 {
     if (__n >= __size_)
     {
-#ifndef _LIBCPP_NO_EXCEPTIONS
-        throw out_of_range("dynarray::at");
-#else
-        assert(!"dynarray::at out_of_range");
-#endif
+        __libcpp_throw(out_of_range("dynarray::at"));
     }
     return data()[__n];
 }
Index: include/exception
===================================================================
--- include/exception
+++ include/exception
@@ -259,7 +259,7 @@
 
 template <class _Exception>
 _LIBCPP_INLINE_VISIBILITY
-inline void __libcpp_throw(_Exception const& __e) {
+inline __attribute__((noreturn)) void __libcpp_throw(_Exception const& __e) {
 #ifndef _LIBCPP_NO_EXCEPTIONS
     throw __e;
 #else
Index: include/deque
===================================================================
--- include/deque
+++ include/deque
@@ -903,18 +903,14 @@
 void
 __deque_base_common<__b>::__throw_length_error() const
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    throw length_error("deque");
-#endif
+    __libcpp_throw(length_error("deque"));
 }
 
 template <bool __b>
 void
 __deque_base_common<__b>::__throw_out_of_range() const
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    throw out_of_range("deque");
-#endif
+    __libcpp_throw(out_of_range("deque"));
 }
 
 template <class _Tp, class _Allocator>
Index: include/complex
===================================================================
--- include/complex
+++ include/complex
@@ -245,9 +245,6 @@
 #include <stdexcept>
 #include <cmath>
 #include <sstream>
-#if defined(_LIBCPP_NO_EXCEPTIONS)
-    #include <cassert>
-#endif
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #pragma GCC system_header
Index: include/bitset
===================================================================
--- include/bitset
+++ include/bitset
@@ -125,9 +125,6 @@
 #include <stdexcept>
 #include <iosfwd>
 #include <__functional_base>
-#if defined(_LIBCPP_NO_EXCEPTIONS)
-    #include <cassert>
-#endif
 
 #include <__undef_min_max>
 
@@ -326,11 +323,7 @@
     const_iterator __e = __make_iter(_Size);
     const_iterator __i = _VSTD::find(__make_iter(sizeof(unsigned long) * CHAR_BIT), __e, true);
     if (__i != __e)
-#ifndef _LIBCPP_NO_EXCEPTIONS
-        throw overflow_error("bitset to_ulong overflow error");
-#else
-        assert(!"bitset to_ulong overflow error");
-#endif
+        __libcpp_throw(overflow_error("bitset to_ulong overflow error"));
     return __first_[0];
 }
 
@@ -349,11 +342,7 @@
     const_iterator __e = __make_iter(_Size);
     const_iterator __i = _VSTD::find(__make_iter(sizeof(unsigned long long) * CHAR_BIT), __e, true);
     if (__i != __e)
-#ifndef _LIBCPP_NO_EXCEPTIONS
-        throw overflow_error("bitset to_ullong overflow error");
-#else
-        assert(!"bitset to_ullong overflow error");
-#endif
+        __libcpp_throw(overflow_error("bitset to_ullong overflow error"));
     return to_ullong(true_type());
 }
 
@@ -763,11 +752,7 @@
     size_t __rlen = _VSTD::min(__n, char_traits<_CharT>::length(__str));
     for (size_t __i = 0; __i < __rlen; ++__i)
         if (__str[__i] != __zero && __str[__i] != __one)
-#ifndef _LIBCPP_NO_EXCEPTIONS
-            throw invalid_argument("bitset string ctor has invalid argument");
-#else
-            assert(!"bitset string ctor has invalid argument");
-#endif
+            __libcpp_throw(invalid_argument("bitset string ctor has invalid argument"));
     size_t _Mp = _VSTD::min(__rlen, _Size);
     size_t __i = 0;
     for (; __i < _Mp; ++__i)
@@ -789,19 +774,11 @@
        _CharT __zero, _CharT __one)
 {
     if (__pos > __str.size())
-#ifndef _LIBCPP_NO_EXCEPTIONS
-        throw out_of_range("bitset string pos out of range");
-#else
-        assert(!"bitset string pos out of range");
-#endif
+        __libcpp_throw(out_of_range("bitset string pos out of range"));
     size_t __rlen = _VSTD::min(__n, __str.size() - __pos);
     for (size_t __i = __pos; __i < __pos + __rlen; ++__i)
         if (!_Traits::eq(__str[__i], __zero) && !_Traits::eq(__str[__i], __one))
-#ifndef _LIBCPP_NO_EXCEPTIONS
-            throw invalid_argument("bitset string ctor has invalid argument");
-#else
-            assert(!"bitset string ctor has invalid argument");
-#endif
+            __libcpp_throw(invalid_argument("bitset string ctor has invalid argument"));
     size_t _Mp = _VSTD::min(__rlen, _Size);
     size_t __i = 0;
     for (; __i < _Mp; ++__i)
@@ -876,11 +853,7 @@
 bitset<_Size>::set(size_t __pos, bool __val)
 {
     if (__pos >= _Size)
-#ifndef _LIBCPP_NO_EXCEPTIONS
-        throw out_of_range("bitset set argument out of range");
-#else
-        assert(!"bitset set argument out of range");
-#endif
+        __libcpp_throw(out_of_range("bitset set argument out of range"));
     (*this)[__pos] = __val;
     return *this;
 }
@@ -899,11 +872,7 @@
 bitset<_Size>::reset(size_t __pos)
 {
     if (__pos >= _Size)
-#ifndef _LIBCPP_NO_EXCEPTIONS
-        throw out_of_range("bitset reset argument out of range");
-#else
-        assert(!"bitset reset argument out of range");
-#endif
+        __libcpp_throw(out_of_range("bitset reset argument out of range"));
     (*this)[__pos] = false;
     return *this;
 }
@@ -932,11 +901,7 @@
 bitset<_Size>::flip(size_t __pos)
 {
     if (__pos >= _Size)
-#ifndef _LIBCPP_NO_EXCEPTIONS
-        throw out_of_range("bitset flip argument out of range");
-#else
-        assert(!"bitset flip argument out of range");
-#endif
+        __libcpp_throw(out_of_range("bitset flip argument out of range"));
     reference r = base::__make_ref(__pos);
     r = ~r;
     return *this;
@@ -1027,11 +992,7 @@
 bitset<_Size>::test(size_t __pos) const
 {
     if (__pos >= _Size)
-#ifndef _LIBCPP_NO_EXCEPTIONS
-        throw out_of_range("bitset test argument out of range");
-#else
-        assert(!"bitset test argument out of range");
-#endif
+        __libcpp_throw(out_of_range("bitset test argument out of range"));
     return (*this)[__pos];
 }
 
Index: include/array
===================================================================
--- include/array
+++ include/array
@@ -108,9 +108,6 @@
 #include <iterator>
 #include <algorithm>
 #include <stdexcept>
-#if defined(_LIBCPP_NO_EXCEPTIONS)
-    #include <cassert>
-#endif
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #pragma GCC system_header
@@ -209,11 +206,7 @@
 array<_Tp, _Size>::at(size_type __n)
 {
     if (__n >= _Size)
-#ifndef _LIBCPP_NO_EXCEPTIONS
-        throw out_of_range("array::at");
-#else
-        assert(!"array::at out_of_range");
-#endif
+        __libcpp_throw(out_of_range("array::at"));
     return __elems_[__n];
 }
 
@@ -223,11 +216,7 @@
 array<_Tp, _Size>::at(size_type __n) const
 {
     if (__n >= _Size)
-#ifndef _LIBCPP_NO_EXCEPTIONS
-        throw out_of_range("array::at");
-#else
-        assert(!"array::at out_of_range");
-#endif
+        __libcpp_throw(out_of_range("array::at"));
     return __elems_[__n];
 }
 
Index: include/__locale
===================================================================
--- include/__locale
+++ include/__locale
@@ -165,10 +165,8 @@
 locale
 locale::combine(const locale& __other) const
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
     if (!_VSTD::has_facet<_Facet>(__other))
-        throw runtime_error("locale::combine: locale missing facet");
-#endif  // _LIBCPP_NO_EXCEPTIONS
+         __libcpp_throw(runtime_error("locale::combine: locale missing facet"));
     return locale(*this, &const_cast<_Facet&>(_VSTD::use_facet<_Facet>(__other)));
 }
 
Index: include/__functional_03
===================================================================
--- include/__functional_03
+++ include/__functional_03
@@ -679,10 +679,8 @@
 _Rp
 function<_Rp()>::operator()() const
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
     if (__f_ == 0)
-        throw bad_function_call();
-#endif  // _LIBCPP_NO_EXCEPTIONS
+        __libcpp_throw(bad_function_call());
     return (*__f_)();
 }
 
@@ -955,10 +953,8 @@
 _Rp
 function<_Rp(_A0)>::operator()(_A0 __a0) const
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
     if (__f_ == 0)
-        throw bad_function_call();
-#endif  // _LIBCPP_NO_EXCEPTIONS
+        __libcpp_throw(bad_function_call());
     return (*__f_)(__a0);
 }
 
@@ -1231,10 +1227,8 @@
 _Rp
 function<_Rp(_A0, _A1)>::operator()(_A0 __a0, _A1 __a1) const
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
     if (__f_ == 0)
-        throw bad_function_call();
-#endif  // _LIBCPP_NO_EXCEPTIONS
+        __libcpp_throw(bad_function_call());
     return (*__f_)(__a0, __a1);
 }
 
@@ -1507,10 +1501,8 @@
 _Rp
 function<_Rp(_A0, _A1, _A2)>::operator()(_A0 __a0, _A1 __a1, _A2 __a2) const
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
     if (__f_ == 0)
-        throw bad_function_call();
-#endif  // _LIBCPP_NO_EXCEPTIONS
+        __libcpp_throw(bad_function_call());
     return (*__f_)(__a0, __a1, __a2);
 }
 
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to