]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
libstdc++: Do not use std::vector<bool>::reference default ctor [PR115098]
authorJonathan Wakely <jwakely@redhat.com>
Tue, 27 Aug 2024 12:30:42 +0000 (13:30 +0100)
committerJonathan Wakely <redi@gcc.gnu.org>
Tue, 27 Aug 2024 13:20:13 +0000 (14:20 +0100)
This default constructor was made private by r15-3124-gb25b101bc38000 so
the pretty printer tests need a fix to stop using it. There's no
conforming way to get a default-constructed 'reference' now, e.g. trying
to access an element of a default-constructed std::vector<bool> will
trigger an assertion. Remove the tests, but leave a comment in the
printer code about handling it.

libstdc++-v3/ChangeLog:

PR libstdc++/115098
* python/libstdcxx/v6/printers.py (StdBitReferencePrinter): Add
comment.
* testsuite/libstdc++-prettyprinters/simple.cc: Do not default
construct std::vector<bool>::reference.
* testsuite/libstdc++-prettyprinters/simple11.cc: Likewise.

libstdc++-v3/python/libstdcxx/v6/printers.py
libstdc++-v3/testsuite/libstdc++-prettyprinters/simple.cc
libstdc++-v3/testsuite/libstdc++-prettyprinters/simple11.cc

index a6c2ed4599fa68d63afdbe181c17dbf8016db601..9210493786276b64baf9c53a431db0b04a19f11a 100644 (file)
@@ -613,6 +613,9 @@ class StdBitReferencePrinter(printer_base):
 
     def to_string(self):
         if not self._val['_M_p']:
+            # PR libstdc++/115098 removed the reference default constructor
+            # that this case relates to. New code should never need this,
+            # but we still handle it for compatibility with old binaries.
             return 'invalid std::vector<bool>::reference'
         return bool(self._val['_M_p'].dereference() & (self._val['_M_mask']))
 
index 7bdc6548f72708bc415895078839e5c70781c18a..c6d18d3fe03c82be520b12a596312648ccb06f60 100644 (file)
@@ -153,9 +153,6 @@ main()
   std::vector<bool>::reference br5 = *vbIt5;
 // { dg-final { note-test br5 {true} } }
 
- std::vector<bool>::reference br0;
-// { dg-final { note-test br0 {invalid std::vector<bool>::reference} } }
-
   __gnu_cxx::slist<int> sll;
   sll.push_front(23);
   sll.push_front(47);
index 3658e3ef4eb4903458f7fc426d399b8f743b192a..7fd0c4d76b2ae3d4599028609f25b6d9fb198050 100644 (file)
@@ -146,9 +146,6 @@ main()
   std::vector<bool>::reference br5 = *vbIt5;
 // { dg-final { note-test br5 {true} } }
 
- std::vector<bool>::reference br0;
-// { dg-final { note-test br0 {invalid std::vector<bool>::reference} } }
-
   __gnu_cxx::slist<int> sll;
   sll.push_front(23);
   sll.push_front(47);