[PATH][_GLIBCXX_DEBUG] Fix unordered container merge

François Dumont frs.dumont@gmail.com
Thu Nov 11 21:33:27 GMT 2021


On 11/11/21 9:41 pm, Jonathan Wakely wrote:
>
>
> On Wed, 10 Nov 2021 at 11:55, Jonathan Wakely <jwakely@redhat.com 
> <mailto:jwakely@redhat.com>> wrote:
>
>
>
>     On Tue, 9 Nov 2021 at 16:25, Jonathan Wakely <jwakely@redhat.com
>     <mailto:jwakely@redhat.com>> wrote:
>
>
>
>         On Mon, 8 Nov 2021 at 21:36, François Dumont
>         <frs.dumont@gmail.com <mailto:frs.dumont@gmail.com>> wrote:
>
>             Yet another version this time with only 1 guard
>             implementation. The predicate to invalidate the safe
>             iterators has been externalized.
>
>             Ok to commit ?
>
>
>         I like this version a lot - thanks for persisting with it.
>
>
>
>     I'm seeing new failures with this:
>
>     make check
>     RUNTESTFLAGS="conformance.exp=23_containers/*/invalidation/*
>     --target_board=unix/-D_GLIBCXX_DEBUG/-std=gnu++98"
>
>     FAIL: 23_containers/deque/debug/invalidation/1.cc (test for excess
>     errors)
>     FAIL: 23_containers/list/debug/invalidation/1.cc (test for excess
>     errors)
>     FAIL: 23_containers/map/debug/invalidation/1.cc (test for excess
>     errors)
>     FAIL: 23_containers/multimap/debug/invalidation/1.cc (test for
>     excess errors)
>     FAIL: 23_containers/multiset/debug/invalidation/1.cc (test for
>     excess errors)
>     FAIL: 23_containers/set/debug/invalidation/1.cc (test for excess
>     errors)
>     FAIL: 23_containers/vector/debug/invalidation/1.cc (test for
>     excess errors)
>
>
> It's caused by:
>
> --- a/libstdc++-v3/include/debug/safe_container.h
> +++ b/libstdc++-v3/include/debug/safe_container.h
> @@ -78,7 +78,6 @@namespace __gnu_debug
>       { }
> #endif
>
> -    public:
>       // Copy assignment invalidate all iterators.
>       _Safe_container&
>       operator=(const _Safe_container&) _GLIBCXX_NOEXCEPT
>
>
> For C++98 mode that gets called explicitly by the user-provided copy 
> assignment operators in the derived class.
>
> I'm testing the attached fix.
>
I am also testing a patch but yours looks nicer so go ahead. I'll just 
complete it with some additional cleanup I did to suppress 
_Safe_container::_M_safe() and reduce usages of _M_base().

Thanks




More information about the Libstdc++ mailing list