diff options
author | Guillaume Chatelet <gchatelet@google.com> | 2019-09-18 09:24:40 +0000 |
---|---|---|
committer | Guillaume Chatelet <gchatelet@google.com> | 2019-09-18 09:24:40 +0000 |
commit | ef8ef1278af826f2489649c30b828e5542302eef (patch) | |
tree | 952028c6cc413c16ffbbad42f855d1262d28a5c8 | |
parent | d94c7bf06e00582c07fc0e9d215710eb6866f79b (diff) | |
download | bcm5719-llvm-ef8ef1278af826f2489649c30b828e5542302eef.tar.gz bcm5719-llvm-ef8ef1278af826f2489649c30b828e5542302eef.zip |
[Alignment] Add a None() member function
Summary:
This will allow writing `if(A != llvm::Align::None())` which is clearer than `if(A > llvm::Align(1))`
This is patch is part of a series to introduce an Alignment type.
See this thread for context: http://lists.llvm.org/pipermail/llvm-dev/2019-July/133851.html
See this patch for the introduction of the type: https://reviews.llvm.org/D64790
Reviewers: courbet
Subscribers: llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D67697
llvm-svn: 372207
-rw-r--r-- | llvm/include/llvm/Support/Alignment.h | 9 | ||||
-rw-r--r-- | llvm/unittests/Support/AlignmentTest.cpp | 5 |
2 files changed, 12 insertions, 2 deletions
diff --git a/llvm/include/llvm/Support/Alignment.h b/llvm/include/llvm/Support/Alignment.h index 07a69e12c8a..c2673faf317 100644 --- a/llvm/include/llvm/Support/Alignment.h +++ b/llvm/include/llvm/Support/Alignment.h @@ -55,7 +55,7 @@ private: public: /// Default is byte-aligned. - Align() = default; + constexpr Align() = default; /// Do not perform checks in case of copy/move construct/assign, because the /// checks have been performed when building `Other`. Align(const Align &Other) = default; @@ -73,6 +73,13 @@ public: /// This is a hole in the type system and should not be abused. /// Needed to interact with C for instance. uint64_t value() const { return uint64_t(1) << ShiftValue; } + + /// Returns a default constructed Align which corresponds to no alignment. + /// This is useful to test for unalignment as it conveys clear semantic. + /// `if (A != llvm::Align::None())` + /// would be better than + /// `if (A > llvm::Align(1))` + constexpr static const Align None() { return llvm::Align(); } }; /// Treats the value 0 as a 1, so Align is always at least 1. diff --git a/llvm/unittests/Support/AlignmentTest.cpp b/llvm/unittests/Support/AlignmentTest.cpp index 420772541d4..f9cc27b8f42 100644 --- a/llvm/unittests/Support/AlignmentTest.cpp +++ b/llvm/unittests/Support/AlignmentTest.cpp @@ -28,7 +28,10 @@ std::vector<uint64_t> getValidAlignments() { return Out; } -TEST(AlignmentTest, AlignDefaultCTor) { EXPECT_EQ(Align().value(), 1ULL); } +TEST(AlignmentTest, AlignDefaultCTor) { + EXPECT_EQ(Align().value(), 1ULL); + EXPECT_EQ(Align::None().value(), 1ULL); +} TEST(AlignmentTest, MaybeAlignDefaultCTor) { EXPECT_FALSE(MaybeAlign().hasValue()); |