From 678aa32a8bb000f2f2b68941a93484c038855db1 Mon Sep 17 00:00:00 2001 From: Merry Date: Sat, 4 Jun 2022 22:52:36 +0100 Subject: [PATCH] assert: Handle expr strings separately --- include/mcl/assert.hpp | 32 ++++++++++++++++---------------- src/assert.cpp | 4 ++-- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/include/mcl/assert.hpp b/include/mcl/assert.hpp index daf49d7..f77dbe7 100644 --- a/include/mcl/assert.hpp +++ b/include/mcl/assert.hpp @@ -13,12 +13,12 @@ namespace mcl::detail { -[[noreturn]] void assert_terminate_impl(fmt::string_view msg, fmt::format_args args); +[[noreturn]] void assert_terminate_impl(const char* expr_str, fmt::string_view msg, fmt::format_args args); template -[[noreturn]] void assert_terminate(fmt::string_view msg, Ts... args) +[[noreturn]] void assert_terminate(const char* expr_str, fmt::string_view msg, Ts... args) { - assert_terminate_impl(msg, fmt::make_format_args(args...)); + assert_terminate_impl(expr_str, msg, fmt::make_format_args(args...)); } } // namespace mcl::detail @@ -33,25 +33,25 @@ template } \ } else { \ if (!(expr)) [[unlikely]] { \ - ::mcl::detail::assert_terminate(#expr); \ + ::mcl::detail::assert_terminate(#expr, "(none)"); \ } \ } \ }() -#define ASSERT_MSG(expr, ...) \ - [&] { \ - if (std::is_constant_evaluated()) { \ - if (!(expr)) { \ - throw std::logic_error{"ASSERT_MSG failed at compile time"}; \ - } \ - } else { \ - if (!(expr)) [[unlikely]] { \ - ::mcl::detail::assert_terminate(#expr "\nMessage: " __VA_ARGS__); \ - } \ - } \ +#define ASSERT_MSG(expr, ...) \ + [&] { \ + if (std::is_constant_evaluated()) { \ + if (!(expr)) { \ + throw std::logic_error{"ASSERT_MSG failed at compile time"}; \ + } \ + } else { \ + if (!(expr)) [[unlikely]] { \ + ::mcl::detail::assert_terminate(#expr, __VA_ARGS__); \ + } \ + } \ }() -#define ASSERT_FALSE(...) ::mcl::detail::assert_terminate("false\nMessage: " __VA_ARGS__) +#define ASSERT_FALSE(...) ::mcl::detail::assert_terminate("false", __VA_ARGS__) #if defined(NDEBUG) || defined(MCL_IGNORE_ASSERTS) # define DEBUG_ASSERT(expr) ASSUME(expr) diff --git a/src/assert.cpp b/src/assert.cpp index 1e64ea9..8772439 100644 --- a/src/assert.cpp +++ b/src/assert.cpp @@ -11,9 +11,9 @@ namespace mcl::detail { -[[noreturn]] void assert_terminate_impl(fmt::string_view msg, fmt::format_args args) +[[noreturn]] void assert_terminate_impl(const char* expr_str, fmt::string_view msg, fmt::format_args args) { - fmt::print(stderr, "assertion failed: "); + fmt::print(stderr, "assertion failed: {}\nMessage:", expr_str); fmt::vprint(stderr, msg, args); std::fflush(stderr); std::terminate();