https://gcc.gnu.org/g:2bfaa218b066a8782d6a717431dacda688b4f3a9

commit r16-7930-g2bfaa218b066a8782d6a717431dacda688b4f3a9
Author: Nathan Myers <[email protected]>
Date:   Fri Mar 6 05:33:04 2026 -0500

    libstdc++: bitset _GLIBCXX_ASSERTIONS op[] fixes
    
    C++11 forbids a compound statement, as seen in the definition
    of __glibcxx_assert(), in a constexpr function. This patch
    open-codes the assertion in `bitset<>::operator[] const` for
    C++11 to fix a failure in `g++.old-deja/g++.martin/bitset1.C`.
    
    Also, it adds `{ dg-do compile }` in another test to suppress
    a spurious UNRESOLVED complaint.
    
    libstdc++-v3/ChangeLog:
            * include/std/bitset (operator[]() const): Customize bounds
            check for C++11 case.
            * testsuite/20_util/bitset/access/subscript_const_neg.cc:
            Suppress UNRESOLVED complaint.

Diff:
---
 libstdc++-v3/include/std/bitset                                   | 8 ++++++++
 .../testsuite/20_util/bitset/access/subscript_const_neg.cc        | 1 +
 2 files changed, 9 insertions(+)

diff --git a/libstdc++-v3/include/std/bitset b/libstdc++-v3/include/std/bitset
index eb200ab9246c..64dae5be8bf9 100644
--- a/libstdc++-v3/include/std/bitset
+++ b/libstdc++-v3/include/std/bitset
@@ -1298,8 +1298,16 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
       _GLIBCXX_CONSTEXPR bool
       operator[](size_t __position) const
       {
+#if __cplusplus != 201103L
        __glibcxx_assert(__position < _Nb);
        return _Unchecked_test(__position);
+#elif defined(_GLIBCXX_ASSERTIONS)
+       // C++11 forbids a compound stmt in a constexpr function.
+       return __position < _Nb ? _Unchecked_test(__position)
+         : (__builtin_trap(), false);
+#else
+       return _Unchecked_test(__position);
+#endif
       }
       ///@}
 
diff --git 
a/libstdc++-v3/testsuite/20_util/bitset/access/subscript_const_neg.cc 
b/libstdc++-v3/testsuite/20_util/bitset/access/subscript_const_neg.cc
index 12d4f1eaf308..a5676d54a5e4 100644
--- a/libstdc++-v3/testsuite/20_util/bitset/access/subscript_const_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/bitset/access/subscript_const_neg.cc
@@ -1,3 +1,4 @@
+// { dg-do compile }
 #include <bitset>
 
 void test_const_subscript_assignment()

Reply via email to