Read-only mirrors. Development, issues and pull requests are on GitHub.

summaryrefslogtreecommitdiffhomepage
path: root/src/catch2
diff options
context:
space:
mode:
authorMartin Hořeňovský2025-07-28 11:03:40 +0200
committerMartin Hořeňovský2025-07-28 11:03:46 +0200
commita1c7ee115f17c1e83b382f33ef2614070974626f (patch)
tree81dcd5fa0508cc94432f086f466909d3ecdab49e /src/catch2
parentd547cae549f484dda3c6a2b3cc5f71b9db40e842 (diff)
downloadcatch3-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.hpp6
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