On 11/14/26 7:46 AM, Ville Voutilainen wrote:
On Sat, 14 Nov 2026 at 13:56, Ville Voutilainen
<[email protected]> wrote:
On Fri, 13 Nov 2026 at 22:51, Jason Merrill <[email protected]> wrote:
Tested x86_64-pc-linux-gnu.
I assume you don't want to condition this on only __cpp_contracts as in the
current patch. And I don't know how you want to handle the view_interface
empty() issue. But I think the rest of the patch could go in as is. Thoughts?
diff --git a/libstdc++-v3/include/bits/c++config
b/libstdc++-v3/include/bits/c++config
index 0c2407ccd07..fa219b33690 100644
--- a/libstdc++-v3/include/bits/c++config
+++ b/libstdc++-v3/include/bits/c++config
@@ -642,15 +642,26 @@ namespace std
#if defined(_GLIBCXX_ASSERTIONS)
// When _GLIBCXX_ASSERTIONS is defined we enable runtime assertion checks.
// These checks will also be done during constant evaluation.
+# if __cpp_contracts
+# define __glibcxx_assert(cond) __contract_assert(cond)
+# else
# define __glibcxx_assert(cond)
\
do { \
if (__builtin_expect(!bool(cond), false)) \
_GLIBCXX_ASSERT_FAIL(cond); \
} while (false)
+# endif
This seems problematic. If I pass
-fcontract-evaluation-semantic=observe/ignore, that turns the
libstdc++ hardening off.
If I want to observe/ignore the program's own contracts, but keep
libstdc++ hardening on, I can't do that.
..and see also
https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3878r1.html
A plain contract_assert isn't.. ..a good fit for stdlib hardening.
Absolutely. As I was trying to convey in my introductory comment, I
don't intend this to be on by default yet.
Jason