summaryrefslogtreecommitdiffstats
path: root/llvm/unittests/ADT/ArrayRefTest.cpp
diff options
context:
space:
mode:
authorBenjamin Kramer <benny.kra@googlemail.com>2015-08-04 15:52:56 +0000
committerBenjamin Kramer <benny.kra@googlemail.com>2015-08-04 15:52:56 +0000
commit07f42cd526c51131d1748e3be8683d24c396d9eb (patch)
tree8b3b03a5dd3c0d609df6251d3d0102c77e455b92 /llvm/unittests/ADT/ArrayRefTest.cpp
parent924879ad2cdcc380338c971a96668faaddcd6d9d (diff)
downloadbcm5719-llvm-07f42cd526c51131d1748e3be8683d24c396d9eb.tar.gz
bcm5719-llvm-07f42cd526c51131d1748e3be8683d24c396d9eb.zip
[ArrayRef] Make copy use std::uninitialized_copy.
std::copy does not work for non-trivially copyable classes when we're copying into uninitialized memory. llvm-svn: 243995
Diffstat (limited to 'llvm/unittests/ADT/ArrayRefTest.cpp')
-rw-r--r--llvm/unittests/ADT/ArrayRefTest.cpp14
1 files changed, 13 insertions, 1 deletions
diff --git a/llvm/unittests/ADT/ArrayRefTest.cpp b/llvm/unittests/ADT/ArrayRefTest.cpp
index 9ad32d54d36..064024140c4 100644
--- a/llvm/unittests/ADT/ArrayRefTest.cpp
+++ b/llvm/unittests/ADT/ArrayRefTest.cpp
@@ -31,7 +31,7 @@ static_assert(
!std::is_convertible<ArrayRef<volatile int *>, ArrayRef<int *>>::value,
"Removing volatile");
-namespace llvm {
+namespace {
TEST(ArrayRefTest, AllocatorCopy) {
BumpPtrAllocator Alloc;
@@ -45,6 +45,18 @@ TEST(ArrayRefTest, AllocatorCopy) {
EXPECT_NE(Array1.data(), Array1c.data());
EXPECT_TRUE(Array2.equals(Array2c));
EXPECT_NE(Array2.data(), Array2c.data());
+
+ // Check that copy can cope with uninitialized memory.
+ struct NonAssignable {
+ const char *Ptr;
+
+ NonAssignable(const NonAssignable &RHS) = default;
+ void operator=(const NonAssignable &RHS) { assert(RHS.Ptr != nullptr); }
+ bool operator==(const NonAssignable &RHS) const { return Ptr == RHS.Ptr; }
+ } Array3Src[] = {{"hello"}, {"world"}};
+ ArrayRef<NonAssignable> Array3Copy = makeArrayRef(Array3Src).copy(Alloc);
+ EXPECT_EQ(makeArrayRef(Array3Src), Array3Copy);
+ EXPECT_NE(makeArrayRef(Array3Src).data(), Array3Copy.data());
}
TEST(ArrayRefTest, DropBack) {
OpenPOWER on IntegriCloud