From cecee235c1ee2526385c5faa6e2e3343e35d757c Mon Sep 17 00:00:00 2001 From: Konstantin Varlamov Date: Thu, 24 Jul 2025 17:51:25 -0700 Subject: [PATCH] [libc++][hardening] Add a greppable prefix to assertion messages. The current assertion failure messages produced by Hardening are not very grep-friendly (the common part is rarther generic and requires wildcards to match). While it's possible to use `__FILE__` for grepping, it's easier and more straighforward to simply add a libc++-specific prefix; this is especially important for the planned `observe` mode that might produce many assertion failure messages over the course of the program's execution that later need to be filtered and examined. --- libcxx/include/__assert | 4 ++-- libcxx/test/support/check_assertion.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/libcxx/include/__assert b/libcxx/include/__assert index 90eaa6023587b..a9451daf47f2f 100644 --- a/libcxx/include/__assert +++ b/libcxx/include/__assert @@ -20,8 +20,8 @@ #define _LIBCPP_ASSERT(expression, message) \ (__builtin_expect(static_cast(expression), 1) \ ? (void)0 \ - : _LIBCPP_ASSERTION_HANDLER(__FILE__ ":" _LIBCPP_TOSTRING(__LINE__) ": assertion " _LIBCPP_TOSTRING( \ - expression) " failed: " message "\n")) + : _LIBCPP_ASSERTION_HANDLER(__FILE__ ":" _LIBCPP_TOSTRING( \ + __LINE__) ": libc++ Hardening assertion " _LIBCPP_TOSTRING(expression) " failed: " message "\n")) // WARNING: __builtin_assume can currently inhibit optimizations. Only add assumptions with a clear // optimization intent. See https://discourse.llvm.org/t/llvm-assume-blocks-optimization/71609 for a diff --git a/libcxx/test/support/check_assertion.h b/libcxx/test/support/check_assertion.h index a091043195345..8416de76cfd61 100644 --- a/libcxx/test/support/check_assertion.h +++ b/libcxx/test/support/check_assertion.h @@ -52,8 +52,8 @@ MatchResult MatchAssertionMessage(const std::string& text, std::string_view expe // library. std::string assertion_format_string = [&] { if (use_marker) - return (".*###\\n(.*):(\\d+): assertion (.*) failed: (.*)\\n###"); - return ("(.*):(\\d+): assertion (.*) failed: (.*)\\n"); + return (".*###\\n(.*):(\\d+): libc\\+\\+ Hardening assertion (.*) failed: (.*)\\n###"); + return ("(.*):(\\d+): libc\\+\\+ Hardening assertion (.*) failed: (.*)\\n"); }(); std::regex assertion_format(assertion_format_string);