diff options
| author | Marshall Clow <mclow.lists@gmail.com> | 2016-08-25 15:09:01 +0000 |
|---|---|---|
| committer | Marshall Clow <mclow.lists@gmail.com> | 2016-08-25 15:09:01 +0000 |
| commit | d437fa5c8c1185af695b87cdd5ea83aa4a6e7382 (patch) | |
| tree | 2fc9b60f206ef14e242a52af06f8f95b95693962 /libcxx/include/functional | |
| parent | b41b990e05797d1d69ea735bb168893974757422 (diff) | |
| download | bcm5719-llvm-d437fa5c8c1185af695b87cdd5ea83aa4a6e7382.tar.gz bcm5719-llvm-d437fa5c8c1185af695b87cdd5ea83aa4a6e7382.zip | |
Add an _LIBCPP_NORETURN inline function named __throw_XXX for each exception type we define. They either construct and throw the exception, or abort() (if exceptions are disabled). Use these functions everywhere instead of assert()ing when exceptions are disabled. WARNING: This is a behavior change - but only with exceptions disabled. Reviewed as: https://reviews.llvm.org/D23855.
llvm-svn: 279744
Diffstat (limited to 'libcxx/include/functional')
| -rw-r--r-- | libcxx/include/functional | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/libcxx/include/functional b/libcxx/include/functional index db137d1eaaf..d0b65b29abf 100644 --- a/libcxx/include/functional +++ b/libcxx/include/functional @@ -1382,6 +1382,16 @@ class _LIBCPP_EXCEPTION_ABI bad_function_call { }; +_LIBCPP_NORETURN inline _LIBCPP_ALWAYS_INLINE +void __throw_bad_function_call() +{ +#ifndef _LIBCPP_NO_EXCEPTIONS + throw bad_function_call(); +#else + _VSTD::abort(); +#endif +} + template<class _Fp> class _LIBCPP_TYPE_VIS_ONLY function; // undefined namespace __function @@ -1882,10 +1892,8 @@ template<class _Rp, class ..._ArgTypes> _Rp function<_Rp(_ArgTypes...)>::operator()(_ArgTypes... __arg) const { -#ifndef _LIBCPP_NO_EXCEPTIONS if (__f_ == 0) - throw bad_function_call(); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_bad_function_call(); return (*__f_)(_VSTD::forward<_ArgTypes>(__arg)...); } |

