3 ms·
Perhaps simpler would be to just not unwind C++ exceptions through non-C++ stack frames and abort instead. (You'd run into these crashes at development time, d
by loeg 2y ago
Perhaps simpler would be to just not unwind C++ exceptions through non-C++ stack frames and abort instead. (You'd run into these crashes at development time, debugging them would be pretty obvious, and it'd never release like this.) This might not be viable on Windows, though, where there is a lot of both C++ and legacy C code.
- charrondev 2y agoAs I understand this was recent stabilized in rust and is now the default behaviour. https://blog.rust-lang.org/2024/09/05/Rust-1.81.0.html#abort-on-uncaught-panics-in-extern-c-functions https://blog.rust-lang.org/2024/09/05/Rust-1.81.0.html#abort... You have to explicitly opt into unwinding like this now otherwise the program will abort.
- ryao 2y agoAnother possibility is to avoid it in the first place by not allowing C++ function pointers that are not marked noexcept to be passed to C functions. I filed bugs against both GCC and LLVM requesting warnings: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118263 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118263 https://github.com/llvm/llvm-project/issues/121427 https://github.com/llvm/llvm-project/issues/121427 If/when they are implemented, they will become errors with -Werror.
- loeg 2y agoDoesn't seem all that useful unless C++ compilers will start warning about noexcept functions calling exception-throwing functions -- they don't today: https://godbolt.org/z/4qbcbxaET https://godbolt.org/z/4qbcbxaET .
- deleted 2y ago[deleted]
- ryao 2y agoThat is supposed to be handled at runtime: > Whenever an exception is thrown and the search for a handler ([except.handle]) encounters the outermost block of a function with a non-throwing exception specification, the function std :: terminate is invoked ([except.terminate]) https://timsong-cpp.github.io/cppwp/n4950/except.spec#5 https://timsong-cpp.github.io/cppwp/n4950/except.spec#5 If it is not, then there is a bug in the C++ implementation.
- loeg 2y agoCatching it at runtime somewhat defeats the benefit of your approach upthread: > Another possibility is to avoid it in the first place by not allowing C++ function pointers that are not marked noexcept to be passed to C functions.
- ryao 2y agoThe two would combine to avoid situations where people spend 5 days debugging like unity did. That said, my personal preference is to use C instead of C++, which avoids the issues of exceptions breaking kernel expectations entirely.