On Thu, 29 Jul 2021, 23:44 Hans-Peter Nilsson, <h...@bitrange.com> wrote:
> Commit r12-2534 was incomplete and (by inspection derived from > an MMIX build) failing for targets without an insn for > compare_and_swap for pointer-size objects, IOW for targets for > which "ATOMIC_POINTER_LOCK_FREE != 2" is true: > > x/gcc/libstdc++-v3/src/c++17/memory_resource.cc: In member function > 'std::pmr::memory_resource* > > std::pmr::{anonymous}::atomic_mem_res::exchange(std::pmr::memory_resource*)': > x/gcc/libstdc++-v3/src/c++17/memory_resource.cc:140:21: error: > 'exchange' is not a member of 'std' > 140 | return std::exchange(val, r); > | ^~~~~~~~ > make[5]: *** [Makefile:577: memory_resource.lo] Error 1 > make[5]: Leaving directory > '/home/hp/tmp/newmmix-r12-2579-p3/gccobj/mmix/libstdc++-v3/src/c++17' > > This fix was derived from edits elsewhere in that patch. > > Tested mmix-knuth-mmixware, restoring build (together with > target-reviving patches as MMIX is currently and at that commit > broken for target-specific reasons). > > Ok to commit? > Yes, thanks. (We could also just include <utility> to get the declaration of std::exchange, since this isn't a header so we can include whatever we want, but this is fine.) > libstdc++-v3/: > * src/c++17/memory_resource.cc: Use __exchange instead > of std::exchange. > --- > libstdc++-v3/src/c++17/memory_resource.cc | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/libstdc++-v3/src/c++17/memory_resource.cc > b/libstdc++-v3/src/c++17/memory_resource.cc > index 5dfc29fc0ec8..1ba79903f870 100644 > --- a/libstdc++-v3/src/c++17/memory_resource.cc > +++ b/libstdc++-v3/src/c++17/memory_resource.cc > @@ -29,7 +29,7 @@ > #include <new> > #if ATOMIC_POINTER_LOCK_FREE != 2 > # include <bits/std_mutex.h> // std::mutex, std::lock_guard > -# include <bits/move.h> // std::exchange > +# include <bits/move.h> // std::__exchange > #endif > > namespace std _GLIBCXX_VISIBILITY(default) > @@ -117,7 +117,7 @@ namespace pmr > memory_resource* exchange(memory_resource* r) > { > lock_guard<mutex> lock(mx); > - return std::exchange(val, r); > + return std::__exchange(val, r); > } > }; > #else > @@ -137,7 +137,7 @@ namespace pmr > > memory_resource* exchange(memory_resource* r) > { > - return std::exchange(val, r); > + return std::__exchange(val, r); > } > }; > #endif // ATOMIC_POINTER_LOCK_FREE == 2 > -- > 2.20.1 > >