Changes in v2:
 - Tested.
 - Also patch up UNRESOLVED complaint about subscript_const_neg.cc.

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.
---
 libstdc++-v3/include/std/bitset                           | 8 ++++++++
 .../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 eb200ab9246..a23545320ee 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(), bool());
+#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 12d4f1eaf30..a5676d54a5e 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()
-- 
2.52.0

Reply via email to