[PATCH] D21706: [libcxx] refactor for throw
Marshall Clow via cfe-commits
cfe-commits at lists.llvm.org
Tue Jul 12 14:55:00 PDT 2016
mclow.lists added a comment.
I just realized that this will break the following code:
try { __cxxabiv1:: __cxa_bad_cast(); }
catch ( std::bad_cast &ex ) {}
because what gets thrown is a `const std::bad_cast &`
Yes, people should catch by value or const reference.
But that doesn't mean that they always do.
================
Comment at: include/exception:262
@@ -261,3 +261,3 @@
_LIBCPP_INLINE_VISIBILITY
-inline void __libcpp_throw(_Exception const& __e) {
+inline __attribute__((noreturn)) void __libcpp_throw(_Exception const& __e) {
#ifndef _LIBCPP_NO_EXCEPTIONS
----------------
weimingz wrote:
> mclow.lists wrote:
> > I thought that we were going to add a macro for the "no return if no exceptions"
> something like this?
>
> #ifndef __LIBCPP_NO_EXCEPTIONS
> #define NORETURN_EXP __attribute__((noreturn))
> #else
> #define NORETURN_EXP
> #endif
>
> inline NORETURN_EXP void __libcpp_throw(_Exception const& __e) {
> ...
> }
There's another patch out for review that adds `noreturn` attributes for some functions when exceptions are disabled. I suggested a macro name like `_LIBCPP_NO_RETURN_WHEN_EXCEPTIONS_DISABLED` for this instead of using the `[[noreturn]]` or `__attribute__((noreturn)) `.
I can't find the review at the moment, but I'll turn it up.
http://reviews.llvm.org/D21706
More information about the cfe-commits
mailing list