diff --git a/llvm/include/llvm/Support/AlignOf.h b/llvm/include/llvm/Support/AlignOf.h --- a/llvm/include/llvm/Support/AlignOf.h +++ b/llvm/include/llvm/Support/AlignOf.h @@ -13,32 +13,10 @@ #ifndef LLVM_SUPPORT_ALIGNOF_H #define LLVM_SUPPORT_ALIGNOF_H -#include "llvm/Support/Compiler.h" -#include +#include namespace llvm { -namespace detail { - -template class AlignerImpl { - T t; - AlignerImpl rest; - AlignerImpl() = delete; -}; - -template class AlignerImpl { - T t; - AlignerImpl() = delete; -}; - -template union SizerImpl { - char arr[sizeof(T)]; - SizerImpl rest; -}; - -template union SizerImpl { char arr[sizeof(T)]; }; -} // end namespace detail - /// A suitably aligned and sized character array member which can hold elements /// of any type. /// @@ -46,8 +24,8 @@ /// `buffer` member which can be used as suitable storage for a placement new of /// any of these types. template struct AlignedCharArrayUnion { - alignas(::llvm::detail::AlignerImpl) char buffer[sizeof( - llvm::detail::SizerImpl)]; + using AlignedUnion = std::aligned_union_t<1, T, Ts...>; + alignas(alignof(AlignedUnion)) char buffer[sizeof(AlignedUnion)]; }; } // end namespace llvm