Skip to content

Commit 70f331a

Browse files
committed
Do not assume that sizeof(T) is the same as alignof(T) in test
1 parent 4abd141 commit 70f331a

File tree

1 file changed

+13
-12
lines changed

1 file changed

+13
-12
lines changed

libcxx/test/std/utilities/memory/ptr.align/is_sufficiently_aligned.pass.cpp

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,31 +25,32 @@ void test_is_sufficiently_aligned() {
2525
constexpr std::size_t N = alignof(T);
2626

2727
alignas(8 * N) std::remove_cv_t<T> buf[5];
28+
constexpr std::size_t Sz = sizeof(T);
2829

2930
assert(std::is_sufficiently_aligned<N>(&buf[0]));
3031
assert(std::is_sufficiently_aligned<2 * N>(&buf[0]));
3132
assert(std::is_sufficiently_aligned<4 * N>(&buf[0]));
3233
assert(std::is_sufficiently_aligned<8 * N>(&buf[0]));
3334

3435
assert(std::is_sufficiently_aligned<N>(&buf[1]));
35-
assert(!std::is_sufficiently_aligned<2 * N>(&buf[1]));
36-
assert(!std::is_sufficiently_aligned<4 * N>(&buf[1]));
37-
assert(!std::is_sufficiently_aligned<8 * N>(&buf[1]));
36+
assert(std::is_sufficiently_aligned<2 * N>(&buf[1]) == (((1 * Sz) % (2 * N)) == 0));
37+
assert(std::is_sufficiently_aligned<4 * N>(&buf[1]) == (((1 * Sz) % (4 * N)) == 0));
38+
assert(std::is_sufficiently_aligned<8 * N>(&buf[1]) == (((1 * Sz) % (8 * N)) == 0));
3839

3940
assert(std::is_sufficiently_aligned<N>(&buf[2]));
40-
assert(std::is_sufficiently_aligned<2 * N>(&buf[2]));
41-
assert(!std::is_sufficiently_aligned<4 * N>(&buf[2]));
42-
assert(!std::is_sufficiently_aligned<8 * N>(&buf[2]));
41+
assert(std::is_sufficiently_aligned<2 * N>(&buf[2]) == (((2 * Sz) % (2 * N)) == 0));
42+
assert(std::is_sufficiently_aligned<4 * N>(&buf[2]) == (((2 * Sz) % (4 * N)) == 0));
43+
assert(std::is_sufficiently_aligned<8 * N>(&buf[2]) == (((2 * Sz) % (8 * N)) == 0));
4344

4445
assert(std::is_sufficiently_aligned<N>(&buf[3]));
45-
assert(!std::is_sufficiently_aligned<2 * N>(&buf[3]));
46-
assert(!std::is_sufficiently_aligned<4 * N>(&buf[3]));
47-
assert(!std::is_sufficiently_aligned<8 * N>(&buf[3]));
46+
assert(std::is_sufficiently_aligned<2 * N>(&buf[3]) == (((3 * Sz) % (2 * N)) == 0));
47+
assert(std::is_sufficiently_aligned<4 * N>(&buf[3]) == (((3 * Sz) % (4 * N)) == 0));
48+
assert(std::is_sufficiently_aligned<8 * N>(&buf[3]) == (((3 * Sz) % (8 * N)) == 0));
4849

4950
assert(std::is_sufficiently_aligned<N>(&buf[4]));
50-
assert(std::is_sufficiently_aligned<2 * N>(&buf[4]));
51-
assert(std::is_sufficiently_aligned<4 * N>(&buf[4]));
52-
assert(!std::is_sufficiently_aligned<8 * N>(&buf[4]));
51+
assert(std::is_sufficiently_aligned<2 * N>(&buf[4]) == (((4 * Sz) % (2 * N)) == 0));
52+
assert(std::is_sufficiently_aligned<4 * N>(&buf[4]) == (((4 * Sz) % (4 * N)) == 0));
53+
assert(std::is_sufficiently_aligned<8 * N>(&buf[4]) == (((4 * Sz) % (8 * N)) == 0));
5354
}
5455

5556
template <typename T>

0 commit comments

Comments
 (0)