summaryrefslogtreecommitdiff
path: root/unittests/Support/TrailingObjectsTest.cpp
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2017-01-02 19:17:04 +0000
committerDimitry Andric <dim@FreeBSD.org>2017-01-02 19:17:04 +0000
commitb915e9e0fc85ba6f398b3fab0db6a81a8913af94 (patch)
tree98b8f811c7aff2547cab8642daf372d6c59502fb /unittests/Support/TrailingObjectsTest.cpp
parent6421cca32f69ac849537a3cff78c352195e99f1b (diff)
Notes
Diffstat (limited to 'unittests/Support/TrailingObjectsTest.cpp')
-rw-r--r--unittests/Support/TrailingObjectsTest.cpp56
1 files changed, 49 insertions, 7 deletions
diff --git a/unittests/Support/TrailingObjectsTest.cpp b/unittests/Support/TrailingObjectsTest.cpp
index a1d3e7b3c8645..cb5c47d1b25be 100644
--- a/unittests/Support/TrailingObjectsTest.cpp
+++ b/unittests/Support/TrailingObjectsTest.cpp
@@ -41,6 +41,9 @@ public:
unsigned numShorts() const { return NumShorts; }
// Pull some protected members in as public, for testability.
+ template <typename... Ty>
+ using FixedSizeStorage = TrailingObjects::FixedSizeStorage<Ty...>;
+
using TrailingObjects::totalSizeToAlloc;
using TrailingObjects::additionalSizeToAlloc;
using TrailingObjects::getTrailingObjects;
@@ -94,6 +97,9 @@ public:
}
// Pull some protected members in as public, for testability.
+ template <typename... Ty>
+ using FixedSizeStorage = TrailingObjects::FixedSizeStorage<Ty...>;
+
using TrailingObjects::totalSizeToAlloc;
using TrailingObjects::additionalSizeToAlloc;
using TrailingObjects::getTrailingObjects;
@@ -106,7 +112,16 @@ TEST(TrailingObjects, OneArg) {
EXPECT_EQ(Class1::additionalSizeToAlloc<short>(1), sizeof(short));
EXPECT_EQ(Class1::additionalSizeToAlloc<short>(3), sizeof(short) * 3);
+ EXPECT_EQ(alignof(Class1),
+ alignof(Class1::FixedSizeStorage<short>::with_counts<1>::type));
+ EXPECT_EQ(sizeof(Class1::FixedSizeStorage<short>::with_counts<1>::type),
+ llvm::alignTo(Class1::totalSizeToAlloc<short>(1), alignof(Class1)));
EXPECT_EQ(Class1::totalSizeToAlloc<short>(1), sizeof(Class1) + sizeof(short));
+
+ EXPECT_EQ(alignof(Class1),
+ alignof(Class1::FixedSizeStorage<short>::with_counts<3>::type));
+ EXPECT_EQ(sizeof(Class1::FixedSizeStorage<short>::with_counts<3>::type),
+ llvm::alignTo(Class1::totalSizeToAlloc<short>(3), alignof(Class1)));
EXPECT_EQ(Class1::totalSizeToAlloc<short>(3),
sizeof(Class1) + sizeof(short) * 3);
@@ -120,9 +135,8 @@ TEST(TrailingObjects, TwoArg) {
Class2 *C1 = Class2::create(4);
Class2 *C2 = Class2::create(0, 4.2);
- EXPECT_EQ(sizeof(Class2),
- llvm::alignTo(sizeof(bool) * 2, llvm::alignOf<double>()));
- EXPECT_EQ(llvm::alignOf<Class2>(), llvm::alignOf<double>());
+ EXPECT_EQ(sizeof(Class2), llvm::alignTo(sizeof(bool) * 2, alignof(double)));
+ EXPECT_EQ(alignof(Class2), alignof(double));
EXPECT_EQ((Class2::additionalSizeToAlloc<double, short>(1, 0)),
sizeof(double));
@@ -131,6 +145,14 @@ TEST(TrailingObjects, TwoArg) {
EXPECT_EQ((Class2::additionalSizeToAlloc<double, short>(3, 1)),
sizeof(double) * 3 + sizeof(short));
+ EXPECT_EQ(
+ alignof(Class2),
+ (alignof(
+ Class2::FixedSizeStorage<double, short>::with_counts<1, 1>::type)));
+ EXPECT_EQ(
+ sizeof(Class2::FixedSizeStorage<double, short>::with_counts<1, 1>::type),
+ llvm::alignTo(Class2::totalSizeToAlloc<double, short>(1, 1),
+ alignof(Class2)));
EXPECT_EQ((Class2::totalSizeToAlloc<double, short>(1, 1)),
sizeof(Class2) + sizeof(double) + sizeof(short));
@@ -164,7 +186,18 @@ class Class3 final : public TrailingObjects<Class3, double, short, bool> {
TEST(TrailingObjects, ThreeArg) {
EXPECT_EQ((Class3::additionalSizeToAlloc<double, short, bool>(1, 1, 3)),
sizeof(double) + sizeof(short) + 3 * sizeof(bool));
- EXPECT_EQ(sizeof(Class3), llvm::alignTo(1, llvm::alignOf<double>()));
+ EXPECT_EQ(sizeof(Class3), llvm::alignTo(1, alignof(double)));
+
+ EXPECT_EQ(
+ alignof(Class3),
+ (alignof(Class3::FixedSizeStorage<double, short,
+ bool>::with_counts<1, 1, 3>::type)));
+ EXPECT_EQ(
+ sizeof(Class3::FixedSizeStorage<double, short,
+ bool>::with_counts<1, 1, 3>::type),
+ llvm::alignTo(Class3::totalSizeToAlloc<double, short, bool>(1, 1, 3),
+ alignof(Class3)));
+
std::unique_ptr<char[]> P(new char[1000]);
Class3 *C = reinterpret_cast<Class3 *>(P.get());
EXPECT_EQ(C->getTrailingObjects<double>(), reinterpret_cast<double *>(C + 1));
@@ -184,13 +217,22 @@ class Class4 final : public TrailingObjects<Class4, char, long> {
TEST(TrailingObjects, Realignment) {
EXPECT_EQ((Class4::additionalSizeToAlloc<char, long>(1, 1)),
- llvm::alignTo(sizeof(long) + 1, llvm::alignOf<long>()));
- EXPECT_EQ(sizeof(Class4), llvm::alignTo(1, llvm::alignOf<long>()));
+ llvm::alignTo(sizeof(long) + 1, alignof(long)));
+ EXPECT_EQ(sizeof(Class4), llvm::alignTo(1, alignof(long)));
+
+ EXPECT_EQ(
+ alignof(Class4),
+ (alignof(Class4::FixedSizeStorage<char, long>::with_counts<1, 1>::type)));
+ EXPECT_EQ(
+ sizeof(Class4::FixedSizeStorage<char, long>::with_counts<1, 1>::type),
+ llvm::alignTo(Class4::totalSizeToAlloc<char, long>(1, 1),
+ alignof(Class4)));
+
std::unique_ptr<char[]> P(new char[1000]);
Class4 *C = reinterpret_cast<Class4 *>(P.get());
EXPECT_EQ(C->getTrailingObjects<char>(), reinterpret_cast<char *>(C + 1));
EXPECT_EQ(C->getTrailingObjects<long>(),
reinterpret_cast<long *>(llvm::alignAddr(
- reinterpret_cast<char *>(C + 1) + 1, llvm::alignOf<long>())));
+ reinterpret_cast<char *>(C + 1) + 1, alignof(long))));
}
}