* Re: _LIBCXX_DEBUG value initialized singular iterators assert failures in std algorithms [PR104316]
[not found] ` <CACb0b4kQAvpDkWVW00GwPU+ve3T-TMQxhZrJSKs9jzYK+zN=DQ@mail.gmail.com>
@ 2024-03-14 21:49 ` François Dumont
2024-03-16 12:16 ` François Dumont
0 siblings, 1 reply; 14+ messages in thread
From: François Dumont @ 2024-03-14 21:49 UTC (permalink / raw)
To: Jonathan Wakely, Maciej Miera; +Cc: libstdc++, gcc-patches
Hi
This is what I started to do.
For now I haven't touch to __cpp_lib_null_iterators definition as
_Safe_local_iterator still need some work.
libstdc++: Implement N3644 on _Safe_iterator<> [PR114316]
Consider range of value-initialized iterators as valid and empty.
libstdc++-v3/ChangeLog:
PR libstdc++/114316
* include/debug/safe_iterator.tcc
(_Safe_iterator<>::_M_valid_range):
First check if both iterators are value-initialized before
checking if
singular.
* testsuite/23_containers/set/debug/114316.cc: New test case.
* testsuite/23_containers/vector/debug/114316.cc: New test case.
Tested under Linux x86_64, ok to commit ?
François
On 12/03/2024 10:52, Jonathan Wakely wrote:
> On Tue, 12 Mar 2024 at 01:03, Jonathan Wakely <jwakely@redhat.com> wrote:
>> On Tue, 12 Mar 2024 at 00:55, Maciej Miera <maciej.miera@gmail.com> wrote:
>>>
>>>
>>> Wiadomość napisana przez Jonathan Wakely <jwakely@redhat.com> w dniu 11.03.2024, o godz. 21:40:
>>>
>>> On Mon, 11 Mar 2024 at 20:07, Maciej Miera <maciej.miera@gmail.com> wrote:
>>>
>>>
>>> Hello,
>>>
>>> I have tried to introduce an extra level of safety to my codebase and utilize _GLIBCXX_DEBUG in my test builds in order to catch faulty iterators.
>>> However, I have encountered the following problem: I would like to utilize singular, value-initialized iterators as an arbitrary "null range”.
>>> However, this leads to failed assertions in std:: algorithms taking such range.
>>>
>>> Consider the following code sample with find_if:
>>>
>>> #include <map>
>>> #include <algorithm>
>>> #include <iterator>
>>>
>>> #ifndef __cpp_lib_null_iterators
>>> #warning "Not standard compliant"
>>> #endif
>>>
>>> int main()
>>> {
>>> std::multimap<char, int>::iterator it1{};
>>> std::multimap<char, int>::iterator it2{};
>>>
>>> (void) (it1==it2); // OK
>>> (void) std::find_if(
>>> it1, it2, [](const auto& el) { return el.second == 8;});
>>> }
>>>
>>> Compiled with -std=c++20 and -D_GLIBCXX_DEBUG it produces the warning "Not standard compliant"
>>> and the execution results in the following assert failure:
>>>
>>> /opt/compiler-explorer/gcc-12.2.0/include/c++/12.2.0/bits/stl_algo.h:3875:
>>> In function:
>>> constexpr _IIter std::find_if(_IIter, _IIter, _Predicate) [with _IIter =
>>> gnu_debug::_Safe_iterator<_Rb_tree_iterator<pair<const char, int> >,
>>> debug::multimap<char, int>, bidirectional_iterator_tag>; _Predicate =
>>> main()::<lambda(const auto:16&)>]
>>>
>>> The question is though: is it by design, or is it just a mere oversight? The warning actually suggest the first option.
>>> If it is an intentional design choice, could you provide some rationale behind it, please?
>>>
>>>
>>> The macro was not defined because the C++14 rule wasn't implemented
>>> for debug mode, but that should have been fixed for GCC 11, according
>>> to https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98466 and
>>> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70303
>>> So we should be able to define macro now, except maybe it wasn't fixed
>>> for the RB tree containers.
>>>
>>>
>>>
>>> Just to make sure there are no misunderstandings: comparison via == works fine. The feature check macro without _GLIBCXX_DEBUG and with <iterator> included is also fine. Maybe the need to include a header is the issue, but that’s not the core of the problem anyway.
>> No, it has nothing to do with the headers included. The feature test
>> macro is defined like so:
>>
>> # if (__cplusplus >= 201402L) && (!defined(_GLIBCXX_DEBUG))
>> # define __glibcxx_null_iterators 201304L
>>
>> It's a very deliberate choice to not define it when _GLIBCXX_DEBUG is
>> defined. But as I said, I think we should have changed that.
>>
>>> The actual question is though, whether passing singular iterators to std algorithms (like find_if) should make the asserts at the beginning of the algo function fail when compiled with _GLIBCXX_DEBUG. IMHO, intuitively it should not, as comparing iterators equal would just ensure early exit and return of the same singular iterator.
>>> This seems not to be the case though. The actual message is this:
>>> Error: the function requires a valid iterator range [first, last).
>>> What bothers me is whether the empty virtual range limited by two same singular iterators is actually valid or not.
>> Yes, it's valid. So the bug is in the __glibcxx_requires_valid_range macro.
> Thanks for the bugzilla report:
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114316
> We'll get it fixed!
>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: _LIBCXX_DEBUG value initialized singular iterators assert failures in std algorithms [PR104316]
2024-03-14 21:49 ` _LIBCXX_DEBUG value initialized singular iterators assert failures in std algorithms [PR104316] François Dumont
@ 2024-03-16 12:16 ` François Dumont
2024-03-17 11:45 ` Jonathan Wakely
0 siblings, 1 reply; 14+ messages in thread
From: François Dumont @ 2024-03-16 12:16 UTC (permalink / raw)
To: Jonathan Wakely, Maciej Miera; +Cc: libstdc++, gcc-patches
[-- Attachment #1: Type: text/plain, Size: 4963 bytes --]
With the patch, sorry.
On 14/03/2024 22:49, François Dumont wrote:
> Hi
>
> This is what I started to do.
>
> For now I haven't touch to __cpp_lib_null_iterators definition as
> _Safe_local_iterator still need some work.
>
> libstdc++: Implement N3644 on _Safe_iterator<> [PR114316]
>
> Consider range of value-initialized iterators as valid and empty.
>
> libstdc++-v3/ChangeLog:
>
> PR libstdc++/114316
> * include/debug/safe_iterator.tcc
> (_Safe_iterator<>::_M_valid_range):
> First check if both iterators are value-initialized before
> checking if
> singular.
> * testsuite/23_containers/set/debug/114316.cc: New test case.
> * testsuite/23_containers/vector/debug/114316.cc: New test case.
>
> Tested under Linux x86_64, ok to commit ?
>
> François
>
>
> On 12/03/2024 10:52, Jonathan Wakely wrote:
>> On Tue, 12 Mar 2024 at 01:03, Jonathan Wakely <jwakely@redhat.com>
>> wrote:
>>> On Tue, 12 Mar 2024 at 00:55, Maciej Miera <maciej.miera@gmail.com>
>>> wrote:
>>>>
>>>>
>>>> Wiadomość napisana przez Jonathan Wakely <jwakely@redhat.com> w
>>>> dniu 11.03.2024, o godz. 21:40:
>>>>
>>>> On Mon, 11 Mar 2024 at 20:07, Maciej Miera <maciej.miera@gmail.com>
>>>> wrote:
>>>>
>>>>
>>>> Hello,
>>>>
>>>> I have tried to introduce an extra level of safety to my codebase
>>>> and utilize _GLIBCXX_DEBUG in my test builds in order to catch
>>>> faulty iterators.
>>>> However, I have encountered the following problem: I would like to
>>>> utilize singular, value-initialized iterators as an arbitrary "null
>>>> range”.
>>>> However, this leads to failed assertions in std:: algorithms taking
>>>> such range.
>>>>
>>>> Consider the following code sample with find_if:
>>>>
>>>> #include <map>
>>>> #include <algorithm>
>>>> #include <iterator>
>>>>
>>>> #ifndef __cpp_lib_null_iterators
>>>> #warning "Not standard compliant"
>>>> #endif
>>>>
>>>> int main()
>>>> {
>>>> std::multimap<char, int>::iterator it1{};
>>>> std::multimap<char, int>::iterator it2{};
>>>>
>>>> (void) (it1==it2); // OK
>>>> (void) std::find_if(
>>>> it1, it2, [](const auto& el) { return el.second == 8;});
>>>> }
>>>>
>>>> Compiled with -std=c++20 and -D_GLIBCXX_DEBUG it produces the
>>>> warning "Not standard compliant"
>>>> and the execution results in the following assert failure:
>>>>
>>>> /opt/compiler-explorer/gcc-12.2.0/include/c++/12.2.0/bits/stl_algo.h:3875:
>>>>
>>>> In function:
>>>> constexpr _IIter std::find_if(_IIter, _IIter, _Predicate) [with
>>>> _IIter =
>>>> gnu_debug::_Safe_iterator<_Rb_tree_iterator<pair<const char, int> >,
>>>> debug::multimap<char, int>, bidirectional_iterator_tag>;
>>>> _Predicate =
>>>> main()::<lambda(const auto:16&)>]
>>>>
>>>> The question is though: is it by design, or is it just a mere
>>>> oversight? The warning actually suggest the first option.
>>>> If it is an intentional design choice, could you provide some
>>>> rationale behind it, please?
>>>>
>>>>
>>>> The macro was not defined because the C++14 rule wasn't implemented
>>>> for debug mode, but that should have been fixed for GCC 11, according
>>>> to https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98466 and
>>>> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70303
>>>> So we should be able to define macro now, except maybe it wasn't fixed
>>>> for the RB tree containers.
>>>>
>>>>
>>>>
>>>> Just to make sure there are no misunderstandings: comparison via ==
>>>> works fine. The feature check macro without _GLIBCXX_DEBUG and with
>>>> <iterator> included is also fine. Maybe the need to include a
>>>> header is the issue, but that’s not the core of the problem anyway.
>>> No, it has nothing to do with the headers included. The feature test
>>> macro is defined like so:
>>>
>>> # if (__cplusplus >= 201402L) && (!defined(_GLIBCXX_DEBUG))
>>> # define __glibcxx_null_iterators 201304L
>>>
>>> It's a very deliberate choice to not define it when _GLIBCXX_DEBUG is
>>> defined. But as I said, I think we should have changed that.
>>>
>>>> The actual question is though, whether passing singular iterators
>>>> to std algorithms (like find_if) should make the asserts at the
>>>> beginning of the algo function fail when compiled with
>>>> _GLIBCXX_DEBUG. IMHO, intuitively it should not, as comparing
>>>> iterators equal would just ensure early exit and return of the same
>>>> singular iterator.
>>>> This seems not to be the case though. The actual message is this:
>>>> Error: the function requires a valid iterator range [first, last).
>>>> What bothers me is whether the empty virtual range limited by two
>>>> same singular iterators is actually valid or not.
>>> Yes, it's valid. So the bug is in the __glibcxx_requires_valid_range
>>> macro.
>> Thanks for the bugzilla report:
>> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114316
>> We'll get it fixed!
>>
[-- Attachment #2: pr104316.txt --]
[-- Type: text/plain, Size: 2121 bytes --]
diff --git a/libstdc++-v3/include/debug/safe_iterator.tcc b/libstdc++-v3/include/debug/safe_iterator.tcc
index a8b24233e85..4b2baf2980e 100644
--- a/libstdc++-v3/include/debug/safe_iterator.tcc
+++ b/libstdc++-v3/include/debug/safe_iterator.tcc
@@ -194,6 +194,12 @@ namespace __gnu_debug
std::pair<difference_type, _Distance_precision>& __dist,
bool __check_dereferenceable) const
{
+ if (_M_value_initialized() && __rhs._M_value_initialized())
+ {
+ __dist = std::make_pair(0, __dp_exact);
+ return true;
+ }
+
if (_M_singular() || __rhs._M_singular() || !_M_can_compare(__rhs))
return false;
@@ -218,6 +224,12 @@ namespace __gnu_debug
std::pair<difference_type,
_Distance_precision>& __dist) const
{
+ if (this->_M_value_initialized() && __rhs._M_value_initialized())
+ {
+ __dist = std::make_pair(0, __dp_exact);
+ return true;
+ }
+
if (this->_M_singular() || __rhs._M_singular()
|| !this->_M_can_compare(__rhs))
return false;
diff --git a/libstdc++-v3/testsuite/23_containers/set/debug/114316.cc b/libstdc++-v3/testsuite/23_containers/set/debug/114316.cc
new file mode 100644
index 00000000000..126ec89b5e0
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/set/debug/114316.cc
@@ -0,0 +1,16 @@
+// { dg-do run { target c++11 } }
+// { dg-require-debug-mode "" }
+
+// PR libstdc++/114316
+
+#include <set>
+#include <algorithm>
+
+#include <testsuite_hooks.h>
+
+int main()
+{
+ std::set<int>::iterator it{};
+ VERIFY( std::find(it, it, 0) == it );
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/vector/debug/114316.cc b/libstdc++-v3/testsuite/23_containers/vector/debug/114316.cc
new file mode 100644
index 00000000000..f211cf67b4c
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/vector/debug/114316.cc
@@ -0,0 +1,16 @@
+// { dg-do run { target c++11 } }
+// { dg-require-debug-mode "" }
+
+// PR libstdc++/114316
+
+#include <vector>
+#include <algorithm>
+
+#include <testsuite_hooks.h>
+
+int main()
+{
+ std::vector<int>::iterator it{};
+ VERIFY( std::find(it, it, 0) == it );
+ return 0;
+}
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: _LIBCXX_DEBUG value initialized singular iterators assert failures in std algorithms [PR104316]
2024-03-16 12:16 ` François Dumont
@ 2024-03-17 11:45 ` Jonathan Wakely
2024-03-17 16:52 ` François Dumont
0 siblings, 1 reply; 14+ messages in thread
From: Jonathan Wakely @ 2024-03-17 11:45 UTC (permalink / raw)
To: François Dumont
Cc: Jonathan Wakely, Maciej Miera, libstdc++, gcc-patches
[-- Attachment #1: Type: text/plain, Size: 5505 bytes --]
On Sat, 16 Mar 2024, 12:16 François Dumont, <frs.dumont@gmail.com> wrote:
> With the patch, sorry.
>
> On 14/03/2024 22:49, François Dumont wrote:
> > Hi
> >
> > This is what I started to do.
> >
> > For now I haven't touch to __cpp_lib_null_iterators definition as
> > _Safe_local_iterator still need some work.
> >
> > libstdc++: Implement N3644 on _Safe_iterator<> [PR114316]
> >
> > Consider range of value-initialized iterators as valid and empty.
> >
> > libstdc++-v3/ChangeLog:
> >
> > PR libstdc++/114316
> > * include/debug/safe_iterator.tcc
> > (_Safe_iterator<>::_M_valid_range):
> > First check if both iterators are value-initialized before
> > checking if
> > singular.
> > * testsuite/23_containers/set/debug/114316.cc: New test case.
> > * testsuite/23_containers/vector/debug/114316.cc: New test case.
> >
> > Tested under Linux x86_64, ok to commit ?
>
OK for trunk, thanks!
I think this is OK to backport to 13 too.
Maybe after this we can define the __cpp_lib_null_itetators macro for debug
mode?
>
> > François
> >
> >
> > On 12/03/2024 10:52, Jonathan Wakely wrote:
> >> On Tue, 12 Mar 2024 at 01:03, Jonathan Wakely <jwakely@redhat.com>
> >> wrote:
> >>> On Tue, 12 Mar 2024 at 00:55, Maciej Miera <maciej.miera@gmail.com>
> >>> wrote:
> >>>>
> >>>>
> >>>> Wiadomość napisana przez Jonathan Wakely <jwakely@redhat.com> w
> >>>> dniu 11.03.2024, o godz. 21:40:
> >>>>
> >>>> On Mon, 11 Mar 2024 at 20:07, Maciej Miera <maciej.miera@gmail.com>
> >>>> wrote:
> >>>>
> >>>>
> >>>> Hello,
> >>>>
> >>>> I have tried to introduce an extra level of safety to my codebase
> >>>> and utilize _GLIBCXX_DEBUG in my test builds in order to catch
> >>>> faulty iterators.
> >>>> However, I have encountered the following problem: I would like to
> >>>> utilize singular, value-initialized iterators as an arbitrary "null
> >>>> range”.
> >>>> However, this leads to failed assertions in std:: algorithms taking
> >>>> such range.
> >>>>
> >>>> Consider the following code sample with find_if:
> >>>>
> >>>> #include <map>
> >>>> #include <algorithm>
> >>>> #include <iterator>
> >>>>
> >>>> #ifndef __cpp_lib_null_iterators
> >>>> #warning "Not standard compliant"
> >>>> #endif
> >>>>
> >>>> int main()
> >>>> {
> >>>> std::multimap<char, int>::iterator it1{};
> >>>> std::multimap<char, int>::iterator it2{};
> >>>>
> >>>> (void) (it1==it2); // OK
> >>>> (void) std::find_if(
> >>>> it1, it2, [](const auto& el) { return el.second == 8;});
> >>>> }
> >>>>
> >>>> Compiled with -std=c++20 and -D_GLIBCXX_DEBUG it produces the
> >>>> warning "Not standard compliant"
> >>>> and the execution results in the following assert failure:
> >>>>
> >>>>
> /opt/compiler-explorer/gcc-12.2.0/include/c++/12.2.0/bits/stl_algo.h:3875:
> >>>>
> >>>> In function:
> >>>> constexpr _IIter std::find_if(_IIter, _IIter, _Predicate) [with
> >>>> _IIter =
> >>>> gnu_debug::_Safe_iterator<_Rb_tree_iterator<pair<const char, int> >,
> >>>> debug::multimap<char, int>, bidirectional_iterator_tag>;
> >>>> _Predicate =
> >>>> main()::<lambda(const auto:16&)>]
> >>>>
> >>>> The question is though: is it by design, or is it just a mere
> >>>> oversight? The warning actually suggest the first option.
> >>>> If it is an intentional design choice, could you provide some
> >>>> rationale behind it, please?
> >>>>
> >>>>
> >>>> The macro was not defined because the C++14 rule wasn't implemented
> >>>> for debug mode, but that should have been fixed for GCC 11, according
> >>>> to https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98466 and
> >>>> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70303
> >>>> So we should be able to define macro now, except maybe it wasn't fixed
> >>>> for the RB tree containers.
> >>>>
> >>>>
> >>>>
> >>>> Just to make sure there are no misunderstandings: comparison via ==
> >>>> works fine. The feature check macro without _GLIBCXX_DEBUG and with
> >>>> <iterator> included is also fine. Maybe the need to include a
> >>>> header is the issue, but that’s not the core of the problem anyway.
> >>> No, it has nothing to do with the headers included. The feature test
> >>> macro is defined like so:
> >>>
> >>> # if (__cplusplus >= 201402L) && (!defined(_GLIBCXX_DEBUG))
> >>> # define __glibcxx_null_iterators 201304L
> >>>
> >>> It's a very deliberate choice to not define it when _GLIBCXX_DEBUG is
> >>> defined. But as I said, I think we should have changed that.
> >>>
> >>>> The actual question is though, whether passing singular iterators
> >>>> to std algorithms (like find_if) should make the asserts at the
> >>>> beginning of the algo function fail when compiled with
> >>>> _GLIBCXX_DEBUG. IMHO, intuitively it should not, as comparing
> >>>> iterators equal would just ensure early exit and return of the same
> >>>> singular iterator.
> >>>> This seems not to be the case though. The actual message is this:
> >>>> Error: the function requires a valid iterator range [first, last).
> >>>> What bothers me is whether the empty virtual range limited by two
> >>>> same singular iterators is actually valid or not.
> >>> Yes, it's valid. So the bug is in the __glibcxx_requires_valid_range
> >>> macro.
> >> Thanks for the bugzilla report:
> >> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114316
> >> We'll get it fixed!
> >>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: _LIBCXX_DEBUG value initialized singular iterators assert failures in std algorithms [PR104316]
2024-03-17 11:45 ` Jonathan Wakely
@ 2024-03-17 16:52 ` François Dumont
2024-03-17 18:14 ` François Dumont
2024-03-18 7:45 ` Jonathan Wakely
0 siblings, 2 replies; 14+ messages in thread
From: François Dumont @ 2024-03-17 16:52 UTC (permalink / raw)
To: Jonathan Wakely; +Cc: Jonathan Wakely, libstdc++, gcc-patches
[-- Attachment #1: Type: text/plain, Size: 1082 bytes --]
>
> OK for trunk, thanks!
>
> I think this is OK to backport to 13 too.
>
> Maybe after this we can define the __cpp_lib_null_itetators macro for
> debug mode?
>
After this fix of local_iterator I think we can indeed.
In fact the added 11316.cc was already passing for
unordered_set<>::local_iterator but simply because we were missing the
singular check. Both issues solved with this patch.
I found the version.def file to cleanup but no idea how to regenerate
version.h from it so I'll let you do it, ok ?
libstdc++: Fix _Safe_local_iterator<>::_M_valid_range
Unordered container local_iterator range shall not contain any singular
iterator unless both iterators are value-initialized.
libstdc++-v3/ChangeLog:
* include/debug/safe_local_iterator.tcc
(_Safe_local_iterator::_M_valid_range): Add
_M_value_initialized and
_M_singular checks.
* testsuite/23_containers/unordered_set/debug/114316.cc:
New test case.
Ok to commit ?
François
[-- Attachment #2: safe_local_iterator.txt --]
[-- Type: text/plain, Size: 1491 bytes --]
diff --git a/libstdc++-v3/include/debug/safe_local_iterator.tcc b/libstdc++-v3/include/debug/safe_local_iterator.tcc
index 90e60e37c32..6d546ec040c 100644
--- a/libstdc++-v3/include/debug/safe_local_iterator.tcc
+++ b/libstdc++-v3/include/debug/safe_local_iterator.tcc
@@ -78,7 +78,13 @@ namespace __gnu_debug
_M_valid_range(const _Safe_local_iterator& __rhs,
std::pair<difference_type, _Distance_precision>& __dist) const
{
- if (!_M_can_compare(__rhs))
+ if (_M_value_initialized() && __rhs._M_value_initialized())
+ {
+ __dist = { 0, __dp_exact };
+ return true;
+ }
+
+ if (_M_singular() || __rhs._M_singular() || !_M_can_compare(__rhs))
return false;
if (bucket() != __rhs.bucket())
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/debug/114316.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/114316.cc
new file mode 100644
index 00000000000..41b649a9cbd
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/114316.cc
@@ -0,0 +1,28 @@
+// { dg-do run { target c++11 } }
+// { dg-require-debug-mode "" }
+
+// PR libstdc++/114316
+
+#include <unordered_set>
+#include <algorithm>
+
+#include <testsuite_hooks.h>
+
+void test01()
+{
+ std::unordered_set<int>::iterator it{};
+ VERIFY( std::find(it, it, 0) == it );
+}
+
+void test02()
+{
+ std::unordered_set<int>::local_iterator it{};
+ VERIFY( std::find(it, it, 0) == it );
+}
+
+int main()
+{
+ test01();
+ test02();
+ return 0;
+}
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: _LIBCXX_DEBUG value initialized singular iterators assert failures in std algorithms [PR104316]
2024-03-17 16:52 ` François Dumont
@ 2024-03-17 18:14 ` François Dumont
2024-03-18 7:45 ` Jonathan Wakely
2024-03-18 7:45 ` Jonathan Wakely
1 sibling, 1 reply; 14+ messages in thread
From: François Dumont @ 2024-03-17 18:14 UTC (permalink / raw)
To: Jonathan Wakely; +Cc: Jonathan Wakely, libstdc++, gcc-patches
[-- Attachment #1: Type: text/plain, Size: 1865 bytes --]
I was a little bit too confident below. After review of all _M_singular
usages I found another necessary fix.
After this one for sure we will be able to define
__cpp_lib_null_iterators even in Debug mode.
libstdc++: Fix N3344 behavior on _Safe_iterator::_M_can_advance
We shall be able to advance from a 0 offset a value-initialized
iterator.
libstdc++-v3/ChangeLog:
* include/debug/safe_iterator.tcc
(_Safe_iterator<>::_M_can_advance):
Accept 0 offset advance on value-initialized iterator.
* testsuite/23_containers/vector/debug/n3644.cc: New test case.
Ok to commit ?
François
On 17/03/2024 17:52, François Dumont wrote:
>
>>
>> OK for trunk, thanks!
>>
>> I think this is OK to backport to 13 too.
>>
>> Maybe after this we can define the __cpp_lib_null_itetators macro for
>> debug mode?
>>
> After this fix of local_iterator I think we can indeed.
>
> In fact the added 11316.cc was already passing for
> unordered_set<>::local_iterator but simply because we were missing the
> singular check. Both issues solved with this patch.
>
> I found the version.def file to cleanup but no idea how to regenerate
> version.h from it so I'll let you do it, ok ?
>
> libstdc++: Fix _Safe_local_iterator<>::_M_valid_range
>
> Unordered container local_iterator range shall not contain any
> singular
> iterator unless both iterators are value-initialized.
>
> libstdc++-v3/ChangeLog:
>
> * include/debug/safe_local_iterator.tcc
> (_Safe_local_iterator::_M_valid_range): Add
> _M_value_initialized and
> _M_singular checks.
> * testsuite/23_containers/unordered_set/debug/114316.cc:
> New test case.
>
>
> Ok to commit ?
>
> François
[-- Attachment #2: n3344_patch.txt --]
[-- Type: text/plain, Size: 1088 bytes --]
diff --git a/libstdc++-v3/include/debug/safe_iterator.tcc b/libstdc++-v3/include/debug/safe_iterator.tcc
index 4b2baf2980e..deaa84d0a1f 100644
--- a/libstdc++-v3/include/debug/safe_iterator.tcc
+++ b/libstdc++-v3/include/debug/safe_iterator.tcc
@@ -86,6 +86,9 @@ namespace __gnu_debug
_Safe_iterator<_Iterator, _Sequence, _Category>::
_M_can_advance(difference_type __n, bool __strict) const
{
+ if (this->_M_value_initialized() && __n == 0)
+ return true;
+
if (this->_M_singular())
return false;
diff --git a/libstdc++-v3/testsuite/23_containers/vector/debug/n3644.cc b/libstdc++-v3/testsuite/23_containers/vector/debug/n3644.cc
new file mode 100644
index 00000000000..052c52f26b7
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/vector/debug/n3644.cc
@@ -0,0 +1,16 @@
+// { dg-do run { target c++11 } }
+// { dg-require-debug-mode "" }
+
+#include <vector>
+#include <algorithm>
+
+#include <testsuite_hooks.h>
+
+int main()
+{
+ std::vector<int>::iterator it{};
+ auto cpy = it;
+ std::advance(it, 0);
+ VERIFY( it == cpy );
+ return 0;
+}
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: _LIBCXX_DEBUG value initialized singular iterators assert failures in std algorithms [PR104316]
2024-03-17 16:52 ` François Dumont
2024-03-17 18:14 ` François Dumont
@ 2024-03-18 7:45 ` Jonathan Wakely
1 sibling, 0 replies; 14+ messages in thread
From: Jonathan Wakely @ 2024-03-18 7:45 UTC (permalink / raw)
To: François Dumont; +Cc: Jonathan Wakely, libstdc++, gcc-patches
On Sun, 17 Mar 2024 at 16:52, François Dumont <frs.dumont@gmail.com> wrote:
>
>
> >
> > OK for trunk, thanks!
> >
> > I think this is OK to backport to 13 too.
> >
> > Maybe after this we can define the __cpp_lib_null_itetators macro for
> > debug mode?
> >
> After this fix of local_iterator I think we can indeed.
>
> In fact the added 11316.cc was already passing for
> unordered_set<>::local_iterator but simply because we were missing the
> singular check. Both issues solved with this patch.
>
> I found the version.def file to cleanup but no idea how to regenerate
> version.h from it so I'll let you do it, ok ?
Sure, I can do that. To regenerate it run 'make update-version' in the
libstdc++-v3/include build directory.
>
> libstdc++: Fix _Safe_local_iterator<>::_M_valid_range
>
> Unordered container local_iterator range shall not contain any singular
> iterator unless both iterators are value-initialized.
>
> libstdc++-v3/ChangeLog:
>
> * include/debug/safe_local_iterator.tcc
> (_Safe_local_iterator::_M_valid_range): Add
> _M_value_initialized and
> _M_singular checks.
> * testsuite/23_containers/unordered_set/debug/114316.cc:
> New test case.
>
>
> Ok to commit ?
OK.
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: _LIBCXX_DEBUG value initialized singular iterators assert failures in std algorithms [PR104316]
2024-03-17 18:14 ` François Dumont
@ 2024-03-18 7:45 ` Jonathan Wakely
2024-03-18 21:38 ` François Dumont
0 siblings, 1 reply; 14+ messages in thread
From: Jonathan Wakely @ 2024-03-18 7:45 UTC (permalink / raw)
To: François Dumont; +Cc: Jonathan Wakely, libstdc++, gcc-patches
On Sun, 17 Mar 2024 at 18:14, François Dumont <frs.dumont@gmail.com> wrote:
>
> I was a little bit too confident below. After review of all _M_singular
> usages I found another necessary fix.
>
> After this one for sure we will be able to define
> __cpp_lib_null_iterators even in Debug mode.
>
> libstdc++: Fix N3344 behavior on _Safe_iterator::_M_can_advance
>
> We shall be able to advance from a 0 offset a value-initialized
> iterator.
>
> libstdc++-v3/ChangeLog:
>
> * include/debug/safe_iterator.tcc
> (_Safe_iterator<>::_M_can_advance):
> Accept 0 offset advance on value-initialized iterator.
> * testsuite/23_containers/vector/debug/n3644.cc: New test case.
>
> Ok to commit ?
OK, thanks.
> François
>
>
> On 17/03/2024 17:52, François Dumont wrote:
> >
> >>
> >> OK for trunk, thanks!
> >>
> >> I think this is OK to backport to 13 too.
> >>
> >> Maybe after this we can define the __cpp_lib_null_itetators macro for
> >> debug mode?
> >>
> > After this fix of local_iterator I think we can indeed.
> >
> > In fact the added 11316.cc was already passing for
> > unordered_set<>::local_iterator but simply because we were missing the
> > singular check. Both issues solved with this patch.
> >
> > I found the version.def file to cleanup but no idea how to regenerate
> > version.h from it so I'll let you do it, ok ?
> >
> > libstdc++: Fix _Safe_local_iterator<>::_M_valid_range
> >
> > Unordered container local_iterator range shall not contain any
> > singular
> > iterator unless both iterators are value-initialized.
> >
> > libstdc++-v3/ChangeLog:
> >
> > * include/debug/safe_local_iterator.tcc
> > (_Safe_local_iterator::_M_valid_range): Add
> > _M_value_initialized and
> > _M_singular checks.
> > * testsuite/23_containers/unordered_set/debug/114316.cc:
> > New test case.
> >
> >
> > Ok to commit ?
> >
> > François
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: _LIBCXX_DEBUG value initialized singular iterators assert failures in std algorithms [PR104316]
2024-03-18 7:45 ` Jonathan Wakely
@ 2024-03-18 21:38 ` François Dumont
2024-03-19 9:31 ` Jonathan Wakely
0 siblings, 1 reply; 14+ messages in thread
From: François Dumont @ 2024-03-18 21:38 UTC (permalink / raw)
To: Jonathan Wakely; +Cc: Jonathan Wakely, libstdc++, gcc-patches
Both committed now.
Just to confirm, those 2 last patches should be backported to gcc-13
branch, right ?
I might have a try to update version.h but if you want to do it before
don't hesitate.
François
On 18/03/2024 08:45, Jonathan Wakely wrote:
> On Sun, 17 Mar 2024 at 18:14, François Dumont <frs.dumont@gmail.com> wrote:
>> I was a little bit too confident below. After review of all _M_singular
>> usages I found another necessary fix.
>>
>> After this one for sure we will be able to define
>> __cpp_lib_null_iterators even in Debug mode.
>>
>> libstdc++: Fix N3344 behavior on _Safe_iterator::_M_can_advance
>>
>> We shall be able to advance from a 0 offset a value-initialized
>> iterator.
>>
>> libstdc++-v3/ChangeLog:
>>
>> * include/debug/safe_iterator.tcc
>> (_Safe_iterator<>::_M_can_advance):
>> Accept 0 offset advance on value-initialized iterator.
>> * testsuite/23_containers/vector/debug/n3644.cc: New test case.
>>
>> Ok to commit ?
>
> OK, thanks.
>
>
>> François
>>
>>
>> On 17/03/2024 17:52, François Dumont wrote:
>>>> OK for trunk, thanks!
>>>>
>>>> I think this is OK to backport to 13 too.
>>>>
>>>> Maybe after this we can define the __cpp_lib_null_itetators macro for
>>>> debug mode?
>>>>
>>> After this fix of local_iterator I think we can indeed.
>>>
>>> In fact the added 11316.cc was already passing for
>>> unordered_set<>::local_iterator but simply because we were missing the
>>> singular check. Both issues solved with this patch.
>>>
>>> I found the version.def file to cleanup but no idea how to regenerate
>>> version.h from it so I'll let you do it, ok ?
>>>
>>> libstdc++: Fix _Safe_local_iterator<>::_M_valid_range
>>>
>>> Unordered container local_iterator range shall not contain any
>>> singular
>>> iterator unless both iterators are value-initialized.
>>>
>>> libstdc++-v3/ChangeLog:
>>>
>>> * include/debug/safe_local_iterator.tcc
>>> (_Safe_local_iterator::_M_valid_range): Add
>>> _M_value_initialized and
>>> _M_singular checks.
>>> * testsuite/23_containers/unordered_set/debug/114316.cc:
>>> New test case.
>>>
>>>
>>> Ok to commit ?
>>>
>>> François
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: _LIBCXX_DEBUG value initialized singular iterators assert failures in std algorithms [PR104316]
2024-03-18 21:38 ` François Dumont
@ 2024-03-19 9:31 ` Jonathan Wakely
2024-03-19 15:41 ` Jonathan Wakely
0 siblings, 1 reply; 14+ messages in thread
From: Jonathan Wakely @ 2024-03-19 9:31 UTC (permalink / raw)
To: François Dumont; +Cc: Jonathan Wakely, libstdc++, gcc-patches
On Mon, 18 Mar 2024 at 21:38, François Dumont wrote:
>
> Both committed now.
>
> Just to confirm, those 2 last patches should be backported to gcc-13
> branch, right ?
Yes please.
>
> I might have a try to update version.h but if you want to do it before
> don't hesitate.
You'll need to have 'autogen' installed to do it (I'm going to update
the docs to describe that today).
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: _LIBCXX_DEBUG value initialized singular iterators assert failures in std algorithms [PR104316]
2024-03-19 9:31 ` Jonathan Wakely
@ 2024-03-19 15:41 ` Jonathan Wakely
2024-03-20 5:59 ` François Dumont
0 siblings, 1 reply; 14+ messages in thread
From: Jonathan Wakely @ 2024-03-19 15:41 UTC (permalink / raw)
To: François Dumont; +Cc: Jonathan Wakely, libstdc++, gcc-patches
On Tue, 19 Mar 2024 at 09:31, Jonathan Wakely wrote:
>
> On Mon, 18 Mar 2024 at 21:38, François Dumont wrote:
> >
> > Both committed now.
> >
> > Just to confirm, those 2 last patches should be backported to gcc-13
> > branch, right ?
>
> Yes please.
>
> >
> > I might have a try to update version.h but if you want to do it before
> > don't hesitate.
>
> You'll need to have 'autogen' installed to do it (I'm going to update
> the docs to describe that today).
I've documented it in a new "Generated files" section at the end of
https://gcc.gnu.org/onlinedocs/libstdc++/manual/appendix_porting.html#build_hacking.generated
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: _LIBCXX_DEBUG value initialized singular iterators assert failures in std algorithms [PR104316]
2024-03-19 15:41 ` Jonathan Wakely
@ 2024-03-20 5:59 ` François Dumont
2024-03-20 9:02 ` Jonathan Wakely
0 siblings, 1 reply; 14+ messages in thread
From: François Dumont @ 2024-03-20 5:59 UTC (permalink / raw)
To: Jonathan Wakely; +Cc: Jonathan Wakely, libstdc++, gcc-patches
[-- Attachment #1: Type: text/plain, Size: 1215 bytes --]
Thanks to you doc:
libstdc++: [_GLIBCXX_DEBUG] Define __[glibcxx,cpp_lib]_null_iterators
_GLIBCXX_DEBUG has now fully N3344 compliant iterator checks, we
can define
__glibcxx_null_iterators and __cpp_lib_null_iterators macros like
the normal
mode.
libstdc++-v3/ChangeLog:
* version.def (null_iterators): Remove extra_cond.
* version.h: Regenerate.
Ok to commit ?
I already noticed that GCC 13 has no version.h file so no backport question.
François
On 19/03/2024 16:41, Jonathan Wakely wrote:
> On Tue, 19 Mar 2024 at 09:31, Jonathan Wakely wrote:
>> On Mon, 18 Mar 2024 at 21:38, François Dumont wrote:
>>> Both committed now.
>>>
>>> Just to confirm, those 2 last patches should be backported to gcc-13
>>> branch, right ?
>> Yes please.
>>
>>> I might have a try to update version.h but if you want to do it before
>>> don't hesitate.
>> You'll need to have 'autogen' installed to do it (I'm going to update
>> the docs to describe that today).
> I've documented it in a new "Generated files" section at the end of
> https://gcc.gnu.org/onlinedocs/libstdc++/manual/appendix_porting.html#build_hacking.generated
>
[-- Attachment #2: version_patch.txt --]
[-- Type: text/plain, Size: 927 bytes --]
diff --git a/libstdc++-v3/include/bits/version.def b/libstdc++-v3/include/bits/version.def
index be5af18e818..26e62c6a9b2 100644
--- a/libstdc++-v3/include/bits/version.def
+++ b/libstdc++-v3/include/bits/version.def
@@ -209,7 +209,6 @@ ftms = {
values = {
v = 201304;
cxxmin = 14;
- extra_cond = "!defined(_GLIBCXX_DEBUG)";
};
};
diff --git a/libstdc++-v3/include/bits/version.h b/libstdc++-v3/include/bits/version.h
index 9107b45a484..23c8c09ab4b 100644
--- a/libstdc++-v3/include/bits/version.h
+++ b/libstdc++-v3/include/bits/version.h
@@ -214,7 +214,7 @@
#undef __glibcxx_want_make_reverse_iterator
#if !defined(__cpp_lib_null_iterators)
-# if (__cplusplus >= 201402L) && (!defined(_GLIBCXX_DEBUG))
+# if (__cplusplus >= 201402L)
# define __glibcxx_null_iterators 201304L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_null_iterators)
# define __cpp_lib_null_iterators 201304L
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: _LIBCXX_DEBUG value initialized singular iterators assert failures in std algorithms [PR104316]
2024-03-20 5:59 ` François Dumont
@ 2024-03-20 9:02 ` Jonathan Wakely
2024-03-20 18:10 ` François Dumont
0 siblings, 1 reply; 14+ messages in thread
From: Jonathan Wakely @ 2024-03-20 9:02 UTC (permalink / raw)
To: François Dumont; +Cc: Jonathan Wakely, libstdc++, gcc-patches
On Wed, 20 Mar 2024 at 05:59, François Dumont wrote:
>
> Thanks to you doc:
>
> libstdc++: [_GLIBCXX_DEBUG] Define __[glibcxx,cpp_lib]_null_iterators
>
> _GLIBCXX_DEBUG has now fully N3344 compliant iterator checks, we
> can define
> __glibcxx_null_iterators and __cpp_lib_null_iterators macros like
> the normal
> mode.
>
> libstdc++-v3/ChangeLog:
>
> * version.def (null_iterators): Remove extra_cond.
> * version.h: Regenerate.
>
> Ok to commit ?
Please don't bother talking about __glibcxx_null_iterators in the
commit message, that's an implementation detail that always mirrors
the standard-defined __cpp_lib_null_iterators one. The first line of
the commit will be much easier to read without that.
OK with that change, thanks.
> I already noticed that GCC 13 has no version.h file so no backport question.
It has no version.h but it still has the macros:
include/std/iterator:# define __cpp_lib_null_iterators 201304L
include/std/version:# define __cpp_lib_null_iterators 201304L
Those definitions can be made to not depend on _GLIBCXX_DEBUG.
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: _LIBCXX_DEBUG value initialized singular iterators assert failures in std algorithms [PR104316]
2024-03-20 9:02 ` Jonathan Wakely
@ 2024-03-20 18:10 ` François Dumont
2024-03-21 6:20 ` Jonathan Wakely
0 siblings, 1 reply; 14+ messages in thread
From: François Dumont @ 2024-03-20 18:10 UTC (permalink / raw)
To: Jonathan Wakely; +Cc: Jonathan Wakely, libstdc++, gcc-patches
[-- Attachment #1: Type: text/plain, Size: 1731 bytes --]
As proposed below I also updated gcc-13 branch.
libstdc++: [_GLIBCXX_DEBUG] Define __cpp_lib_null_iterators
_GLIBCXX_DEBUG has now fully N3344 compliant iterator checks, we
can define
__cpp_lib_null_iterators macros like the normal mode.
libstdc++-v3/ChangeLog:
* include/std/iterator (__cpp_lib_null_iterators): Define
regardless of
_GLIBCXX_DEBUG.
* include/std/version (__cpp_lib_null_iterators): Likewise.
François
On 20/03/2024 10:02, Jonathan Wakely wrote:
> On Wed, 20 Mar 2024 at 05:59, François Dumont wrote:
>> Thanks to you doc:
>>
>> libstdc++: [_GLIBCXX_DEBUG] Define __[glibcxx,cpp_lib]_null_iterators
>>
>> _GLIBCXX_DEBUG has now fully N3344 compliant iterator checks, we
>> can define
>> __glibcxx_null_iterators and __cpp_lib_null_iterators macros like
>> the normal
>> mode.
>>
>> libstdc++-v3/ChangeLog:
>>
>> * version.def (null_iterators): Remove extra_cond.
>> * version.h: Regenerate.
>>
>> Ok to commit ?
> Please don't bother talking about __glibcxx_null_iterators in the
> commit message, that's an implementation detail that always mirrors
> the standard-defined __cpp_lib_null_iterators one. The first line of
> the commit will be much easier to read without that.
>
> OK with that change, thanks.
>
>> I already noticed that GCC 13 has no version.h file so no backport question.
> It has no version.h but it still has the macros:
>
> include/std/iterator:# define __cpp_lib_null_iterators 201304L
> include/std/version:# define __cpp_lib_null_iterators 201304L
>
> Those definitions can be made to not depend on _GLIBCXX_DEBUG.
>
[-- Attachment #2: version_patch.txt --]
[-- Type: text/plain, Size: 1073 bytes --]
diff --git a/libstdc++-v3/include/std/iterator b/libstdc++-v3/include/std/iterator
index 695e18e2c47..a0a8eac570b 100644
--- a/libstdc++-v3/include/std/iterator
+++ b/libstdc++-v3/include/std/iterator
@@ -67,7 +67,7 @@
#endif
#include <bits/range_access.h>
-#if __cplusplus >= 201402L && ! defined _GLIBCXX_DEBUG // PR libstdc++/70303
+#if __cplusplus >= 201402L
# define __cpp_lib_null_iterators 201304L
#endif
diff --git a/libstdc++-v3/include/std/version b/libstdc++-v3/include/std/version
index bd1bee0190d..ee515c4e66c 100644
--- a/libstdc++-v3/include/std/version
+++ b/libstdc++-v3/include/std/version
@@ -81,9 +81,7 @@
#define __cpp_lib_integral_constant_callable 201304L
#define __cpp_lib_is_final 201402L
#define __cpp_lib_make_reverse_iterator 201402L
-#ifndef _GLIBCXX_DEBUG // PR libstdc++/70303
-# define __cpp_lib_null_iterators 201304L
-#endif
+#define __cpp_lib_null_iterators 201304L
#define __cpp_lib_robust_nonmodifying_seq_ops 201304L
#define __cpp_lib_transformation_trait_aliases 201304L
#define __cpp_lib_transparent_operators 201510L
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: _LIBCXX_DEBUG value initialized singular iterators assert failures in std algorithms [PR104316]
2024-03-20 18:10 ` François Dumont
@ 2024-03-21 6:20 ` Jonathan Wakely
0 siblings, 0 replies; 14+ messages in thread
From: Jonathan Wakely @ 2024-03-21 6:20 UTC (permalink / raw)
To: François Dumont; +Cc: Jonathan Wakely, libstdc++, gcc-patches
On Wed, 20 Mar 2024 at 18:11, François Dumont wrote:
>
> As proposed below I also updated gcc-13 branch.
Great, thanks.
>
> libstdc++: [_GLIBCXX_DEBUG] Define __cpp_lib_null_iterators
>
> _GLIBCXX_DEBUG has now fully N3344 compliant iterator checks, we
> can define
> __cpp_lib_null_iterators macros like the normal mode.
>
> libstdc++-v3/ChangeLog:
>
> * include/std/iterator (__cpp_lib_null_iterators): Define
> regardless of
> _GLIBCXX_DEBUG.
> * include/std/version (__cpp_lib_null_iterators): Likewise.
>
> François
>
>
> On 20/03/2024 10:02, Jonathan Wakely wrote:
> > On Wed, 20 Mar 2024 at 05:59, François Dumont wrote:
> >> Thanks to you doc:
> >>
> >> libstdc++: [_GLIBCXX_DEBUG] Define __[glibcxx,cpp_lib]_null_iterators
> >>
> >> _GLIBCXX_DEBUG has now fully N3344 compliant iterator checks, we
> >> can define
> >> __glibcxx_null_iterators and __cpp_lib_null_iterators macros like
> >> the normal
> >> mode.
> >>
> >> libstdc++-v3/ChangeLog:
> >>
> >> * version.def (null_iterators): Remove extra_cond.
> >> * version.h: Regenerate.
> >>
> >> Ok to commit ?
> > Please don't bother talking about __glibcxx_null_iterators in the
> > commit message, that's an implementation detail that always mirrors
> > the standard-defined __cpp_lib_null_iterators one. The first line of
> > the commit will be much easier to read without that.
> >
> > OK with that change, thanks.
> >
> >> I already noticed that GCC 13 has no version.h file so no backport question.
> > It has no version.h but it still has the macros:
> >
> > include/std/iterator:# define __cpp_lib_null_iterators 201304L
> > include/std/version:# define __cpp_lib_null_iterators 201304L
> >
> > Those definitions can be made to not depend on _GLIBCXX_DEBUG.
> >
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2024-03-21 6:20 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <73AC0523-2237-46FD-9885-7AE3F8663DF2@gmail.com>
[not found] ` <CACb0b4=K2UNWaqRa884LWxk29KLqi7MwOXcNUq+a4rm6-a8rsw@mail.gmail.com>
[not found] ` <28CE4FD1-FFB0-4300-81CA-C3CB07E436A6@gmail.com>
[not found] ` <CACb0b4nbBPtsKybYBS6V=HwQur0Kbjg+nYpCDXAd8x0Bg6pWvw@mail.gmail.com>
[not found] ` <CACb0b4kQAvpDkWVW00GwPU+ve3T-TMQxhZrJSKs9jzYK+zN=DQ@mail.gmail.com>
2024-03-14 21:49 ` _LIBCXX_DEBUG value initialized singular iterators assert failures in std algorithms [PR104316] François Dumont
2024-03-16 12:16 ` François Dumont
2024-03-17 11:45 ` Jonathan Wakely
2024-03-17 16:52 ` François Dumont
2024-03-17 18:14 ` François Dumont
2024-03-18 7:45 ` Jonathan Wakely
2024-03-18 21:38 ` François Dumont
2024-03-19 9:31 ` Jonathan Wakely
2024-03-19 15:41 ` Jonathan Wakely
2024-03-20 5:59 ` François Dumont
2024-03-20 9:02 ` Jonathan Wakely
2024-03-20 18:10 ` François Dumont
2024-03-21 6:20 ` Jonathan Wakely
2024-03-18 7:45 ` Jonathan Wakely
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).