llvm-project/libcxx/test/std/containers/sequences/array/array.cons/implicit_copy.addressof.compile.pass.cpp
Mark de Wever b8608b8723 [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
2021-10-07 18:10:47 +02:00

25 lines
700 B
C++

//===----------------------------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
// <array>
// implicitly generated array assignment operators
// Validate whether the container can be copy-assigned with an ADL-hijacking operator&
#include <array>
#include "test_macros.h"
#include "operator_hijacker.h"
void test() {
std::array<operator_hijacker, 1> ao;
std::array<operator_hijacker, 1> a;
a = ao;
}