diff options
Diffstat (limited to 'include/llvm/Support/TrailingObjects.h')
-rw-r--r-- | include/llvm/Support/TrailingObjects.h | 18 |
1 files changed, 7 insertions, 11 deletions
diff --git a/include/llvm/Support/TrailingObjects.h b/include/llvm/Support/TrailingObjects.h index 8cf4f7aed7f8..49be89613c43 100644 --- a/include/llvm/Support/TrailingObjects.h +++ b/include/llvm/Support/TrailingObjects.h @@ -47,6 +47,7 @@ #define LLVM_SUPPORT_TRAILINGOBJECTS_H #include "llvm/Support/AlignOf.h" +#include "llvm/Support/Alignment.h" #include "llvm/Support/Compiler.h" #include "llvm/Support/MathExtras.h" #include "llvm/Support/type_traits.h" @@ -87,11 +88,6 @@ protected: template <typename T> struct OverloadToken {}; }; -/// This helper template works-around MSVC 2013's lack of useful -/// alignas() support. The argument to alignas(), in MSVC, is -/// required to be a literal integer. But, you *can* use template -/// specialization to select between a bunch of different alignas() -/// expressions... template <int Align> class TrailingObjectsAligner : public TrailingObjectsBase {}; template <> @@ -172,7 +168,7 @@ protected: if (requiresRealignment()) return reinterpret_cast<const NextTy *>( - llvm::alignAddr(Ptr, alignof(NextTy))); + alignAddr(Ptr, Align::Of<NextTy>())); else return reinterpret_cast<const NextTy *>(Ptr); } @@ -186,7 +182,7 @@ protected: Obj, TrailingObjectsBase::OverloadToken<PrevTy>()); if (requiresRealignment()) - return reinterpret_cast<NextTy *>(llvm::alignAddr(Ptr, alignof(NextTy))); + return reinterpret_cast<NextTy *>(alignAddr(Ptr, Align::Of<NextTy>())); else return reinterpret_cast<NextTy *>(Ptr); } @@ -254,9 +250,7 @@ class TrailingObjects : private trailing_objects_internal::TrailingObjectsImpl< // because BaseTy isn't complete at class instantiation time, but // will be by the time this function is instantiated. static void verifyTrailingObjectsAssertions() { -#ifdef LLVM_IS_FINAL - static_assert(LLVM_IS_FINAL(BaseTy), "BaseTy must be final."); -#endif + static_assert(std::is_final<BaseTy>(), "BaseTy must be final."); } // These two methods are the base of the recursion for this method. @@ -369,7 +363,9 @@ public: template <typename... Tys> struct FixedSizeStorage { template <size_t... Counts> struct with_counts { enum { Size = totalSizeToAlloc<Tys...>(Counts...) }; - typedef llvm::AlignedCharArray<alignof(BaseTy), Size> type; + struct type { + alignas(BaseTy) char buffer[Size]; + }; }; }; |