4 ms·
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. I filed bu
by ryao 2y ago
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. 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.