diff options
| author | Martin Hořeňovský | 2025-07-28 11:03:40 +0200 |
|---|---|---|
| committer | Martin Hořeňovský | 2025-07-28 11:03:46 +0200 |
| commit | a1c7ee115f17c1e83b382f33ef2614070974626f (patch) | |
| tree | 81dcd5fa0508cc94432f086f466909d3ecdab49e /src/catch2 | |
| parent | d547cae549f484dda3c6a2b3cc5f71b9db40e842 (diff) | |
| download | catch3-a1c7ee115f17c1e83b382f33ef2614070974626f.tar.gz | |
Don't follow __assume(false) with std::terminate in NDEBUG builds
Having `std::terminate` as the backstop after `__assume(false)`
would trigger W4702 (unreachable code) with MSVC. As we want to
keep `__assume(false)` for the optimization hint in NDEBUG builds,
we have to avoid mixing in `std::terminate` for those builds.
Fixes #3007
Diffstat (limited to 'src/catch2')
| -rw-r--r-- | src/catch2/internal/catch_unreachable.hpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/catch2/internal/catch_unreachable.hpp b/src/catch2/internal/catch_unreachable.hpp index 02cca494..fc3f75b5 100644 --- a/src/catch2/internal/catch_unreachable.hpp +++ b/src/catch2/internal/catch_unreachable.hpp @@ -39,9 +39,13 @@ namespace Catch { __assume( false ); # elif defined( __GNUC__ ) __builtin_unreachable(); +# else // vv platform without known optimization hint + std::terminate(); # endif -# endif // ^^ NDEBUG +# else // ^^ NDEBUG + // For non-release builds, we prefer termination on bug over UB std::terminate(); +# endif // } } // namespace Detail |