diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2016-10-21 09:15:57 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2016-10-21 09:15:57 +0000 |
commit | aa48572b9d9649f81715bb90ea8cd6b7fa60b924 (patch) | |
tree | d0e752009f38a7741f5c30fae3b26eae71d996fe /llvm/unittests/Support | |
parent | 41189656ed5ef78c8ad507444b39e2dd2c013762 (diff) | |
download | bcm5719-llvm-aa48572b9d9649f81715bb90ea8cd6b7fa60b924.tar.gz bcm5719-llvm-aa48572b9d9649f81715bb90ea8cd6b7fa60b924.zip |
[Support] Fix AlignOf test on i386-linux.
On i386 alignof(double) = 8 is not the same as alignof(struct { double
}) = 4. This used to be not an issue because the old implementation
always measured alignment inside of structs. Wrap a dummy struct around
the test to avoid this issue.
llvm-svn: 284812
Diffstat (limited to 'llvm/unittests/Support')
-rw-r--r-- | llvm/unittests/Support/AlignOfTest.cpp | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/llvm/unittests/Support/AlignOfTest.cpp b/llvm/unittests/Support/AlignOfTest.cpp index c0468467677..388ca11b776 100644 --- a/llvm/unittests/Support/AlignOfTest.cpp +++ b/llvm/unittests/Support/AlignOfTest.cpp @@ -89,6 +89,8 @@ V6::~V6() {} V7::~V7() {} V8::~V8() {} +template <typename M> struct T { M m; }; + TEST(AlignOfTest, BasicAlignedArray) { EXPECT_LE(1u, alignof(AlignedCharArrayUnion<A1>)); EXPECT_LE(2u, alignof(AlignedCharArrayUnion<A2>)); @@ -124,19 +126,20 @@ TEST(AlignOfTest, BasicAlignedArray) { // For other tests we simply assert that the alignment of the union mathes // that of the fundamental type and hope that we have any weird type // productions that would trigger bugs. - EXPECT_EQ(alignof(char), alignof(AlignedCharArrayUnion<char>)); - EXPECT_EQ(alignof(short), alignof(AlignedCharArrayUnion<short>)); - EXPECT_EQ(alignof(int), alignof(AlignedCharArrayUnion<int>)); - EXPECT_EQ(alignof(long), alignof(AlignedCharArrayUnion<long>)); - EXPECT_EQ(alignof(long long), alignof(AlignedCharArrayUnion<long long>)); - EXPECT_EQ(alignof(float), alignof(AlignedCharArrayUnion<float>)); - EXPECT_EQ(alignof(double), alignof(AlignedCharArrayUnion<double>)); - EXPECT_EQ(alignof(long double), alignof(AlignedCharArrayUnion<long double>)); - EXPECT_EQ(alignof(void *), alignof(AlignedCharArrayUnion<void *>)); - EXPECT_EQ(alignof(int *), alignof(AlignedCharArrayUnion<int *>)); - EXPECT_EQ(alignof(double (*)(double)), + EXPECT_EQ(alignof(T<char>), alignof(AlignedCharArrayUnion<char>)); + EXPECT_EQ(alignof(T<short>), alignof(AlignedCharArrayUnion<short>)); + EXPECT_EQ(alignof(T<int>), alignof(AlignedCharArrayUnion<int>)); + EXPECT_EQ(alignof(T<long>), alignof(AlignedCharArrayUnion<long>)); + EXPECT_EQ(alignof(T<long long>), alignof(AlignedCharArrayUnion<long long>)); + EXPECT_EQ(alignof(T<float>), alignof(AlignedCharArrayUnion<float>)); + EXPECT_EQ(alignof(T<double>), alignof(AlignedCharArrayUnion<double>)); + EXPECT_EQ(alignof(T<long double>), + alignof(AlignedCharArrayUnion<long double>)); + EXPECT_EQ(alignof(T<void *>), alignof(AlignedCharArrayUnion<void *>)); + EXPECT_EQ(alignof(T<int *>), alignof(AlignedCharArrayUnion<int *>)); + EXPECT_EQ(alignof(T<double (*)(double)>), alignof(AlignedCharArrayUnion<double (*)(double)>)); - EXPECT_EQ(alignof(double (S6::*)()), + EXPECT_EQ(alignof(T<double (S6::*)()>), alignof(AlignedCharArrayUnion<double (S6::*)()>)); EXPECT_EQ(alignof(S1), alignof(AlignedCharArrayUnion<S1>)); EXPECT_EQ(alignof(S2), alignof(AlignedCharArrayUnion<S2>)); |