[libc++] Use addressof in assignment operator.
authorMark de Wever <koraq@xs4all.nl>
Tue, 28 Sep 2021 17:15:18 +0000 (19:15 +0200)
committerMark de Wever <koraq@xs4all.nl>
Thu, 7 Oct 2021 16:10:47 +0000 (18:10 +0200)
commitb8608b87239ca7817d1536376a8ce4b5265747ee
treefb41b34c65ae946f36d952a6144c7f778933efa7
parent5ecdb77fc5e71daf994d39840fbe753f46aeca43
[libc++] Use addressof in assignment operator.

Replace `&__rhs` with `_VSTD::addressof(__rhs)` to guard against ADL hijacking
of `operator&` in `operator=`. Thanks to @CaseyCarter for bringing it to our
attention.

Similar issues with hijacking `operator&` still exist, they will be
addressed separately.

Reviewed By: #libc, Quuxplusone, ldionne

Differential Revision: https://reviews.llvm.org/D110852
26 files changed:
libcxx/include/__hash_table
libcxx/include/__tree
libcxx/include/deque
libcxx/include/forward_list
libcxx/include/list
libcxx/include/map
libcxx/include/unordered_map
libcxx/include/valarray
libcxx/include/vector
libcxx/test/std/containers/associative/map/map.cons/copy_assign.addressof.compile.pass.cpp [new file with mode: 0644]
libcxx/test/std/containers/associative/multimap/multimap.cons/copy_assign.addressof.compile.pass.cpp [new file with mode: 0644]
libcxx/test/std/containers/associative/multiset/multiset.cons/copy_assign.addressof.compile.pass.cpp [new file with mode: 0644]
libcxx/test/std/containers/associative/set/set.cons/copy_assign.addressof.compile.pass.cpp [new file with mode: 0644]
libcxx/test/std/containers/container.adaptors/priority.queue/priqueue.cons/assign_copy.addressof.compile.pass.cpp [new file with mode: 0644]
libcxx/test/std/containers/container.adaptors/queue/queue.defn/assign_copy.addressof.compile.pass.cpp [new file with mode: 0644]
libcxx/test/std/containers/sequences/array/array.cons/implicit_copy.addressof.compile.pass.cpp [new file with mode: 0644]
libcxx/test/std/containers/sequences/deque/deque.cons/move_assign.addressof.compile.pass.cpp [new file with mode: 0644]
libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/assign_copy.addressof.compile.pass.cpp [new file with mode: 0644]
libcxx/test/std/containers/sequences/list/list.cons/assign_copy.addressof.compile.pass.cpp [new file with mode: 0644]
libcxx/test/std/containers/sequences/vector/vector.cons/assign_copy.addressof.compile.pass.cpp [new file with mode: 0644]
libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/assign_copy.addressof.compile.pass.cpp [new file with mode: 0644]
libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/assign_copy.addressof.compile.pass.cpp [new file with mode: 0644]
libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/assign_copy.addressof.compile.pass.cpp [new file with mode: 0644]
libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/assign_copy.addressof.compile.pass.cpp [new file with mode: 0644]
libcxx/test/std/numerics/numarray/template.valarray/valarray.assign/value_assign.addressof.compile.pass.cpp [new file with mode: 0644]
libcxx/test/support/operator_hijacker.h [new file with mode: 0644]