<feed xmlns='http://www.w3.org/2005/Atom'>
<title>gcc.git/libstdc++-v3/python/libstdcxx, branch master</title>
<subtitle>Unnamed repository; edit this file 'description' to name the repository.
</subtitle>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/gcc.git/'/>
<entry>
<title>Add 'num_children' method to relevant pretty-printers</title>
<updated>2025-11-14T19:10:16+00:00</updated>
<author>
<name>Tom Tromey</name>
<email>tromey@adacore.com</email>
</author>
<published>2025-11-03T21:02:22+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/gcc.git/commit/?id=de124ffe1439d63e4531f8aaf3641bb8f4260c33'/>
<id>de124ffe1439d63e4531f8aaf3641bb8f4260c33</id>
<content type='text'>
A user pointed out that, in DAP mode, gdb would hang while trying to
display a certain vector.  See

    https://sourceware.org/bugzilla/show_bug.cgi?id=33594

This is caused by a combination of things: the vector is
uninitialized, DAP requires a count of the number of children of a
variable, and libstdc++ printers don't implement the 'num_children'
method, so gdb tries to count children by iterating.

In this case, the vector has a nonsensical size:

    (gdb) p myVector
    $1 = std::vector of length -34979931, capacity -33992726

This patch adds a 'num_children' method to a subset of the
pretty-printers, in particular ones where I thought the length might
be arbitrarily large and susceptible to being garbage when the object
isn't initialized.

I've also specifically added a check to the vector printer for the
case where the length is negative.

These container printers could be further improved by adding the
'child' method, allowing random access to child objects.  However I
haven't done that here.

libstdc++-v3/ChangeLog

	* python/libstdcxx/v6/printers.py (StdVectorPrinter._bounds):
	New method.
	(StdVectorPrinter.to_string): Use it.
	(StdVectorPrinter.num_children): New method.
	(StdStackOrQueuePrinter.num_children): New method.
	(StdMapPrinter.num_children): New method.
	(StdSetPrinter.num_children): New method.
	(StdDequePrinter._size): New method.
	(StdDequePrinter.to_string): Use it.
	(StdDequePrinter.num_children): New method.
	(Tr1UnorderedSetPrinter.num_children): New method.
	(Tr1UnorderedMapPrinter.num_children): New method.
	(StdSpanPrinter.num_children): New method.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
A user pointed out that, in DAP mode, gdb would hang while trying to
display a certain vector.  See

    https://sourceware.org/bugzilla/show_bug.cgi?id=33594

This is caused by a combination of things: the vector is
uninitialized, DAP requires a count of the number of children of a
variable, and libstdc++ printers don't implement the 'num_children'
method, so gdb tries to count children by iterating.

In this case, the vector has a nonsensical size:

    (gdb) p myVector
    $1 = std::vector of length -34979931, capacity -33992726

This patch adds a 'num_children' method to a subset of the
pretty-printers, in particular ones where I thought the length might
be arbitrarily large and susceptible to being garbage when the object
isn't initialized.

I've also specifically added a check to the vector printer for the
case where the length is negative.

These container printers could be further improved by adding the
'child' method, allowing random access to child objects.  However I
haven't done that here.

libstdc++-v3/ChangeLog

	* python/libstdcxx/v6/printers.py (StdVectorPrinter._bounds):
	New method.
	(StdVectorPrinter.to_string): Use it.
	(StdVectorPrinter.num_children): New method.
	(StdStackOrQueuePrinter.num_children): New method.
	(StdMapPrinter.num_children): New method.
	(StdSetPrinter.num_children): New method.
	(StdDequePrinter._size): New method.
	(StdDequePrinter.to_string): Use it.
	(StdDequePrinter.num_children): New method.
	(Tr1UnorderedSetPrinter.num_children): New method.
	(Tr1UnorderedMapPrinter.num_children): New method.
	(StdSpanPrinter.num_children): New method.
</pre>
</div>
</content>
</entry>
<entry>
<title>libstdc++: Add pretty printers for std::stacktrace</title>
<updated>2025-10-15T20:57:59+00:00</updated>
<author>
<name>Jonathan Wakely</name>
<email>jwakely@redhat.com</email>
</author>
<published>2025-10-15T20:44:16+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/gcc.git/commit/?id=fa9008b8a791ab4978777a111bbbd9b636335750'/>
<id>fa9008b8a791ab4978777a111bbbd9b636335750</id>
<content type='text'>
libstdc++-v3/ChangeLog:

	* python/libstdcxx/v6/printers.py (StdStacktraceEntryPrinter):
	New printer for std::stacktrace_entry.
	(StdStacktracePrinter): New printer for std::basic_stacktrace.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
libstdc++-v3/ChangeLog:

	* python/libstdcxx/v6/printers.py (StdStacktraceEntryPrinter):
	New printer for std::stacktrace_entry.
	(StdStacktracePrinter): New printer for std::basic_stacktrace.
</pre>
</div>
</content>
</entry>
<entry>
<title>libstdc++: Make atomic&lt;shared_ptr&lt;T&gt;&gt;::wait sensitive to stored pointer only changes [PR118757]</title>
<updated>2025-10-14T12:38:30+00:00</updated>
<author>
<name>Tomasz Kamiński</name>
<email>tkaminsk@redhat.com</email>
</author>
<published>2025-08-20T13:56:21+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/gcc.git/commit/?id=59889eaa2b4822389794bbb7793c4d7d391d9614'/>
<id>59889eaa2b4822389794bbb7793c4d7d391d9614</id>
<content type='text'>
Previously, atomic&lt;shared_ptr&lt;T&gt;&gt;::wait (and the weak_ptr version) was
equivalent to waiting directly on _M_val, which corresponds to the pointer
to the control block (_M_pi). Consequently, wakeups were not triggered if
the stored pointer value was changed to a pointer that uses the same control
block but stores pointer to a different object. Such a pointer can be
constructed using an aliasing constructor.

To address this, wait now uses a generic proxy wait
std::__atomic_wait_address function, which supports waiting until any
predicate is satisfied. The provided predicate now compares both the control
block (_M_pi) and the stored pointer (_M_ptr). Comparing the latter requires
locking the pointer.

Since this function operates on raw pointers, the type of _M_val was changed
from __atomic_base&lt;uintptr_t&gt; to uintptr_t. Invocations of the corresponding
member functions are now replaced with direct use of __atomic builtins.

	PR libstdc++/118757

libstdc++-v3/ChangeLog:

	* include/bits/shared_ptr_atomic.h (_Atomic_count::_M_wait_unlock):
	Add parameter capturing reference to _M_ptr. Reimplement in terms
	of __atomic_wait_address.
	(_Atomic_count::~_Atomic_count, _Atomic_count::lock)
	(_Atomic_count::unlock, _Atomic_count::_M_swap_unlock): Replace
	invocation of atomic member funcitons with __atomic builtins.
	(_Atomic_count::notify_one, _Atomic_count::notify_all):
	Use __atomic_notify_address.
	(_Sp_atomic::element_type): Define.
	(_Sp_atomic::_M_val): Change type to uintptr_t.
	(_Sp_atomic::wait): Pass _M_ptr to _M_wait_unlock.
	* python/libstdcxx/v6/printers.py:
	* testsuite/20_util/shared_ptr/atomic/pr118757.cc: New test.
	* testsuite/20_util/weak_ptr/pr118757.cc: New test.

Reviewed-by: Jonathan Wakely &lt;jwakely@redhat.com&gt;
Signed-off-by: Tomasz Kamiński &lt;tkaminsk@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Previously, atomic&lt;shared_ptr&lt;T&gt;&gt;::wait (and the weak_ptr version) was
equivalent to waiting directly on _M_val, which corresponds to the pointer
to the control block (_M_pi). Consequently, wakeups were not triggered if
the stored pointer value was changed to a pointer that uses the same control
block but stores pointer to a different object. Such a pointer can be
constructed using an aliasing constructor.

To address this, wait now uses a generic proxy wait
std::__atomic_wait_address function, which supports waiting until any
predicate is satisfied. The provided predicate now compares both the control
block (_M_pi) and the stored pointer (_M_ptr). Comparing the latter requires
locking the pointer.

Since this function operates on raw pointers, the type of _M_val was changed
from __atomic_base&lt;uintptr_t&gt; to uintptr_t. Invocations of the corresponding
member functions are now replaced with direct use of __atomic builtins.

	PR libstdc++/118757

libstdc++-v3/ChangeLog:

	* include/bits/shared_ptr_atomic.h (_Atomic_count::_M_wait_unlock):
	Add parameter capturing reference to _M_ptr. Reimplement in terms
	of __atomic_wait_address.
	(_Atomic_count::~_Atomic_count, _Atomic_count::lock)
	(_Atomic_count::unlock, _Atomic_count::_M_swap_unlock): Replace
	invocation of atomic member funcitons with __atomic builtins.
	(_Atomic_count::notify_one, _Atomic_count::notify_all):
	Use __atomic_notify_address.
	(_Sp_atomic::element_type): Define.
	(_Sp_atomic::_M_val): Change type to uintptr_t.
	(_Sp_atomic::wait): Pass _M_ptr to _M_wait_unlock.
	* python/libstdcxx/v6/printers.py:
	* testsuite/20_util/shared_ptr/atomic/pr118757.cc: New test.
	* testsuite/20_util/weak_ptr/pr118757.cc: New test.

Reviewed-by: Jonathan Wakely &lt;jwakely@redhat.com&gt;
Signed-off-by: Tomasz Kamiński &lt;tkaminsk@redhat.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>libsupc++: Change _Unordered comparison value to minimum value of signed char.</title>
<updated>2025-08-27T12:50:20+00:00</updated>
<author>
<name>Tomasz Kamiński</name>
<email>tkaminsk@redhat.com</email>
</author>
<published>2025-08-26T12:34:35+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/gcc.git/commit/?id=fcb3009a32dc33906934a2360e556dfeb98980cf'/>
<id>fcb3009a32dc33906934a2360e556dfeb98980cf</id>
<content type='text'>
For any minimum value of a signed type, its negation (with wraparound) results
in the same value, behaving like zero. Representing the unordered result with
this minimum value, along with 0 for equal, 1 for greater, and -1 for less
in partial_ordering, allows its value to be reversed using unary negation.

The operator&lt;=(partial_order, 0) now checks if the reversed value is positive.
This works correctly because the unordered value remains unchanged and thus
negative.

libstdc++-v3/ChangeLog:

	* libsupc++/compare (_Ncmp::_Unordered): Rename and change the value
	to minimum value of signed char.
	(_Ncomp::unordered): Renamed from _Unordered, the name is reserved
	by partial_ordered::unordered.
	(partial_ordering::_M_reverse()): Define.
	(operator&lt;=(partial_ordering, __cmp_cat::__unspec))
	(operator&gt;=(__cmp_cat::__unspec, partial_ordering)): Implemented
	in terms of negated _M_value.
	(operator&gt;=(partial_ordering, __cmp_cat::__unspec))
	(operator&lt;=(__cmp_cat::__unspec, partial_ordering)): Directly
	compare _M_value, as unordered value is negative.
	(partial_ordering::unordered): Handle _Ncmp::unoredred rename.
	* python/libstdcxx/v6/printers.py: Add -128 as integer value
	for unordered, keeping 2 to preserve backward compatibility.

Reviewed-by: Jonathan Wakely &lt;jwakely@redhat.com&gt;
Signed-off-by: Tomasz Kamiński &lt;tkaminsk@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
For any minimum value of a signed type, its negation (with wraparound) results
in the same value, behaving like zero. Representing the unordered result with
this minimum value, along with 0 for equal, 1 for greater, and -1 for less
in partial_ordering, allows its value to be reversed using unary negation.

The operator&lt;=(partial_order, 0) now checks if the reversed value is positive.
This works correctly because the unordered value remains unchanged and thus
negative.

libstdc++-v3/ChangeLog:

	* libsupc++/compare (_Ncmp::_Unordered): Rename and change the value
	to minimum value of signed char.
	(_Ncomp::unordered): Renamed from _Unordered, the name is reserved
	by partial_ordered::unordered.
	(partial_ordering::_M_reverse()): Define.
	(operator&lt;=(partial_ordering, __cmp_cat::__unspec))
	(operator&gt;=(__cmp_cat::__unspec, partial_ordering)): Implemented
	in terms of negated _M_value.
	(operator&gt;=(partial_ordering, __cmp_cat::__unspec))
	(operator&lt;=(__cmp_cat::__unspec, partial_ordering)): Directly
	compare _M_value, as unordered value is negative.
	(partial_ordering::unordered): Handle _Ncmp::unoredred rename.
	* python/libstdcxx/v6/printers.py: Add -128 as integer value
	for unordered, keeping 2 to preserve backward compatibility.

Reviewed-by: Jonathan Wakely &lt;jwakely@redhat.com&gt;
Signed-off-by: Tomasz Kamiński &lt;tkaminsk@redhat.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Update copyright years.</title>
<updated>2025-01-02T10:59:57+00:00</updated>
<author>
<name>Jakub Jelinek</name>
<email>jakub@redhat.com</email>
</author>
<published>2025-01-02T10:59:57+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/gcc.git/commit/?id=6441eb6dc020faae0672ea724dfdb38c6a9bf6a1'/>
<id>6441eb6dc020faae0672ea724dfdb38c6a9bf6a1</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>libstdc++: Reorder printer registrations in printers.py</title>
<updated>2024-11-28T15:48:10+00:00</updated>
<author>
<name>Jonathan Wakely</name>
<email>jwakely@redhat.com</email>
</author>
<published>2024-11-28T15:23:25+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/gcc.git/commit/?id=6bba4ca26c9919c0d5b590d648bd0ae9adc678ac'/>
<id>6bba4ca26c9919c0d5b590d648bd0ae9adc678ac</id>
<content type='text'>
Register StdIntegralConstantPrinter with the other C++11 printers, and
register StdTextEncodingPrinter after C++20 printers.

libstdc++-v3/ChangeLog:

	* python/libstdcxx/v6/printers.py: Reorder registrations.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Register StdIntegralConstantPrinter with the other C++11 printers, and
register StdTextEncodingPrinter after C++20 printers.

libstdc++-v3/ChangeLog:

	* python/libstdcxx/v6/printers.py: Reorder registrations.
</pre>
</div>
</content>
</entry>
<entry>
<title>libstdc++: Fix Python deprecation warning in printers.py</title>
<updated>2024-10-16T09:09:16+00:00</updated>
<author>
<name>Jonathan Wakely</name>
<email>jwakely@redhat.com</email>
</author>
<published>2024-10-16T08:22:37+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/gcc.git/commit/?id=b9e98bb9919fa9f07782f23f79b3d35abb9ff542'/>
<id>b9e98bb9919fa9f07782f23f79b3d35abb9ff542</id>
<content type='text'>
python/libstdcxx/v6/printers.py:1355: DeprecationWarning: 'count' is passed as positional argument

The Python docs say:

  Deprecated since version 3.13: Passing count and flags as positional
  arguments is deprecated. In future Python versions they will be
  keyword-only parameters.

Using a keyword argument for count only became possible with Python 3.1
so introduce a new function to do the substitution.

libstdc++-v3/ChangeLog:

	* python/libstdcxx/v6/printers.py (strip_fundts_namespace): New.
	(StdExpAnyPrinter, StdExpOptionalPrinter): Use it.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
python/libstdcxx/v6/printers.py:1355: DeprecationWarning: 'count' is passed as positional argument

The Python docs say:

  Deprecated since version 3.13: Passing count and flags as positional
  arguments is deprecated. In future Python versions they will be
  keyword-only parameters.

Using a keyword argument for count only became possible with Python 3.1
so introduce a new function to do the substitution.

libstdc++-v3/ChangeLog:

	* python/libstdcxx/v6/printers.py (strip_fundts_namespace): New.
	(StdExpAnyPrinter, StdExpOptionalPrinter): Use it.
</pre>
</div>
</content>
</entry>
<entry>
<title>libstdc++: Do not use std::vector&lt;bool&gt;::reference default ctor [PR115098]</title>
<updated>2024-08-27T13:20:13+00:00</updated>
<author>
<name>Jonathan Wakely</name>
<email>jwakely@redhat.com</email>
</author>
<published>2024-08-27T12:30:42+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/gcc.git/commit/?id=75ef21665cb924265b818b08babbc7ec3108c876'/>
<id>75ef21665cb924265b818b08babbc7ec3108c876</id>
<content type='text'>
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&lt;bool&gt; 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&lt;bool&gt;::reference.
	* testsuite/libstdc++-prettyprinters/simple11.cc: Likewise.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
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&lt;bool&gt; 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&lt;bool&gt;::reference.
	* testsuite/libstdc++-prettyprinters/simple11.cc: Likewise.
</pre>
</div>
</content>
</entry>
<entry>
<title>libstdc++: Implement C++26 std::text_encoding (P1885R12) [PR113318]</title>
<updated>2024-01-17T11:49:11+00:00</updated>
<author>
<name>Jonathan Wakely</name>
<email>jwakely@redhat.com</email>
</author>
<published>2024-01-15T15:42:50+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/gcc.git/commit/?id=df0a668b784556fe4317317d58961652d93d53de'/>
<id>df0a668b784556fe4317317d58961652d93d53de</id>
<content type='text'>
This is another C++26 change, approved in Varna 2023. We require a new
static array of data that is extracted from the IANA Character Sets
database. A new Python script to generate a header from the IANA CSV
file is added.

The text_encoding class is basically just a pointer to an {ID,name} pair
in the static array. The aliases view is also just the same pointer (or
empty), and the view's iterator moves forwards and backwards in the
array while the array elements have the same ID (or to one element
further, for a past-the-end iterator).

Because those iterators refer to a global array that never goes out of
scope, there's no reason they should every produce undefined behaviour
or indeterminate values.  They should either have well-defined
behaviour, or abort. The overhead of ensuring those properties is pretty
low, so seems worth it.

This means that an aliases_view iterator should never be able to access
out-of-bounds. A non-value-initialized iterator always points to an
element of the static array even when not dereferenceable (the array has
unreachable entries at the start and end, which means that even a
past-the-end iterator for the last encoding in the array still points to
valid memory).  Dereferencing an iterator can always return a valid
array element, or "" for a non-dereferenceable iterator (but doing so
will abort when assertions are enabled).  In the language being proposed
for C++26, dereferencing an invalid iterator erroneously returns "".
Attempting to increment/decrement past the last/first element in the
view is erroneously a no-op, so aborts when assertions are enabled, and
doesn't change value otherwise.

Similarly, constructing a std::text_encoding with an invalid id (one
that doesn't have the value of an enumerator) erroneously behaves the
same as constructing with id::unknown, or aborts with assertions
enabled.

libstdc++-v3/ChangeLog:

	PR libstdc++/113318
	* acinclude.m4 (GLIBCXX_CONFIGURE): Add c++26 directory.
	(GLIBCXX_CHECK_TEXT_ENCODING): Define.
	* config.h.in: Regenerate.
	* configure: Regenerate.
	* configure.ac: Use GLIBCXX_CHECK_TEXT_ENCODING.
	* include/Makefile.am: Add new headers.
	* include/Makefile.in: Regenerate.
	* include/bits/locale_classes.h (locale::encoding): Declare new
	member function.
	* include/bits/unicode.h (__charset_alias_match): New function.
	* include/bits/text_encoding-data.h: New file.
	* include/bits/version.def (text_encoding): Define.
	* include/bits/version.h: Regenerate.
	* include/std/text_encoding: New file.
	* src/Makefile.am: Add new subdirectory.
	* src/Makefile.in: Regenerate.
	* src/c++26/Makefile.am: New file.
	* src/c++26/Makefile.in: New file.
	* src/c++26/text_encoding.cc: New file.
	* src/experimental/Makefile.am: Include c++26 convenience
	library.
	* src/experimental/Makefile.in: Regenerate.
	* python/libstdcxx/v6/printers.py (StdTextEncodingPrinter): New
	printer.
	* scripts/gen_text_encoding_data.py: New file.
	* testsuite/22_locale/locale/encoding.cc: New test.
	* testsuite/ext/unicode/charset_alias_match.cc: New test.
	* testsuite/std/text_encoding/cons.cc: New test.
	* testsuite/std/text_encoding/members.cc: New test.
	* testsuite/std/text_encoding/requirements.cc: New test.

Reviewed-by: Ulrich Drepper &lt;drepper.fsp@gmail.com&gt;
Reviewed-by: Patrick Palka &lt;ppalka@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This is another C++26 change, approved in Varna 2023. We require a new
static array of data that is extracted from the IANA Character Sets
database. A new Python script to generate a header from the IANA CSV
file is added.

The text_encoding class is basically just a pointer to an {ID,name} pair
in the static array. The aliases view is also just the same pointer (or
empty), and the view's iterator moves forwards and backwards in the
array while the array elements have the same ID (or to one element
further, for a past-the-end iterator).

Because those iterators refer to a global array that never goes out of
scope, there's no reason they should every produce undefined behaviour
or indeterminate values.  They should either have well-defined
behaviour, or abort. The overhead of ensuring those properties is pretty
low, so seems worth it.

This means that an aliases_view iterator should never be able to access
out-of-bounds. A non-value-initialized iterator always points to an
element of the static array even when not dereferenceable (the array has
unreachable entries at the start and end, which means that even a
past-the-end iterator for the last encoding in the array still points to
valid memory).  Dereferencing an iterator can always return a valid
array element, or "" for a non-dereferenceable iterator (but doing so
will abort when assertions are enabled).  In the language being proposed
for C++26, dereferencing an invalid iterator erroneously returns "".
Attempting to increment/decrement past the last/first element in the
view is erroneously a no-op, so aborts when assertions are enabled, and
doesn't change value otherwise.

Similarly, constructing a std::text_encoding with an invalid id (one
that doesn't have the value of an enumerator) erroneously behaves the
same as constructing with id::unknown, or aborts with assertions
enabled.

libstdc++-v3/ChangeLog:

	PR libstdc++/113318
	* acinclude.m4 (GLIBCXX_CONFIGURE): Add c++26 directory.
	(GLIBCXX_CHECK_TEXT_ENCODING): Define.
	* config.h.in: Regenerate.
	* configure: Regenerate.
	* configure.ac: Use GLIBCXX_CHECK_TEXT_ENCODING.
	* include/Makefile.am: Add new headers.
	* include/Makefile.in: Regenerate.
	* include/bits/locale_classes.h (locale::encoding): Declare new
	member function.
	* include/bits/unicode.h (__charset_alias_match): New function.
	* include/bits/text_encoding-data.h: New file.
	* include/bits/version.def (text_encoding): Define.
	* include/bits/version.h: Regenerate.
	* include/std/text_encoding: New file.
	* src/Makefile.am: Add new subdirectory.
	* src/Makefile.in: Regenerate.
	* src/c++26/Makefile.am: New file.
	* src/c++26/Makefile.in: New file.
	* src/c++26/text_encoding.cc: New file.
	* src/experimental/Makefile.am: Include c++26 convenience
	library.
	* src/experimental/Makefile.in: Regenerate.
	* python/libstdcxx/v6/printers.py (StdTextEncodingPrinter): New
	printer.
	* scripts/gen_text_encoding_data.py: New file.
	* testsuite/22_locale/locale/encoding.cc: New test.
	* testsuite/ext/unicode/charset_alias_match.cc: New test.
	* testsuite/std/text_encoding/cons.cc: New test.
	* testsuite/std/text_encoding/members.cc: New test.
	* testsuite/std/text_encoding/requirements.cc: New test.

Reviewed-by: Ulrich Drepper &lt;drepper.fsp@gmail.com&gt;
Reviewed-by: Patrick Palka &lt;ppalka@redhat.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>libstdc++: Add GDB printer for std::integral_constant</title>
<updated>2024-01-11T17:35:57+00:00</updated>
<author>
<name>Jonathan Wakely</name>
<email>jwakely@redhat.com</email>
</author>
<published>2024-01-10T10:53:43+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/gcc.git/commit/?id=cd2022f39297198adad0e284f8780cb3d83d0f85'/>
<id>cd2022f39297198adad0e284f8780cb3d83d0f85</id>
<content type='text'>
libstdc++-v3/ChangeLog:

	* python/libstdcxx/v6/printers.py (StdIntegralConstantPrinter):
	Add printer for std::integral_constant.
	* testsuite/libstdc++-prettyprinters/cxx11.cc: Test it.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
libstdc++-v3/ChangeLog:

	* python/libstdcxx/v6/printers.py (StdIntegralConstantPrinter):
	Add printer for std::integral_constant.
	* testsuite/libstdc++-prettyprinters/cxx11.cc: Test it.
</pre>
</div>
</content>
</entry>
</feed>
