Author: Duncan P. N. Exon Smith Date: 2020-12-04T12:34:49-08:00 New Revision: d10f9863a5ac1cb681af07719650c44b48f289ce
URL: https://github.com/llvm/llvm-project/commit/d10f9863a5ac1cb681af07719650c44b48f289ce DIFF: https://github.com/llvm/llvm-project/commit/d10f9863a5ac1cb681af07719650c44b48f289ce.diff LOG: ADT: Migrate users of AlignedCharArrayUnion to std::aligned_union_t, NFC Prepare to delete `AlignedCharArrayUnion` by migrating its users over to `std::aligned_union_t`. I will delete `AlignedCharArrayUnion` and its tests in a follow-up commit so that it's easier to revert in isolation in case some downstream wants to keep using it. Differential Revision: https://reviews.llvm.org/D92516 Added: Modified: clang/include/clang/AST/APValue.h clang/include/clang/AST/ASTContext.h clang/include/clang/AST/ASTTypeTraits.h clang/include/clang/AST/ParentMapContext.h clang/include/clang/Frontend/PrecompiledPreamble.h clang/include/clang/Sema/Overload.h clang/lib/DirectoryWatcher/linux/DirectoryWatcher-linux.cpp clang/lib/DirectoryWatcher/windows/DirectoryWatcher-windows.cpp clang/lib/Lex/PPDirectives.cpp llvm/include/llvm/ADT/DenseMap.h llvm/include/llvm/ADT/IntervalMap.h llvm/include/llvm/CodeGen/DIE.h llvm/include/llvm/CodeGen/SelectionDAGNodes.h llvm/include/llvm/Support/Error.h llvm/include/llvm/Support/ErrorOr.h llvm/include/llvm/Support/JSON.h llvm/include/llvm/Support/TrailingObjects.h llvm/include/llvm/Support/YAMLTraits.h llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp Removed: ################################################################################ diff --git a/clang/include/clang/AST/APValue.h b/clang/include/clang/AST/APValue.h index eded34808ad7..d6a33c13b096 100644 --- a/clang/include/clang/AST/APValue.h +++ b/clang/include/clang/AST/APValue.h @@ -20,7 +20,7 @@ #include "llvm/ADT/FoldingSet.h" #include "llvm/ADT/PointerIntPair.h" #include "llvm/ADT/PointerUnion.h" -#include "llvm/Support/AlignOf.h" +#include <type_traits> namespace clang { class AddrLabelExpr; @@ -286,9 +286,10 @@ class APValue { struct MemberPointerData; // We ensure elsewhere that Data is big enough for LV and MemberPointerData. - typedef llvm::AlignedCharArrayUnion<void *, APSInt, APFloat, ComplexAPSInt, - ComplexAPFloat, Vec, Arr, StructData, - UnionData, AddrLabelDiffData> DataType; + typedef std::aligned_union_t<1, void *, APSInt, APFloat, ComplexAPSInt, + ComplexAPFloat, Vec, Arr, StructData, UnionData, + AddrLabelDiffData> + DataType; static const size_t DataSize = sizeof(DataType); DataType Data; diff --git a/clang/include/clang/AST/ASTContext.h b/clang/include/clang/AST/ASTContext.h index 8c0930237583..7d58b426a3df 100644 --- a/clang/include/clang/AST/ASTContext.h +++ b/clang/include/clang/AST/ASTContext.h @@ -57,7 +57,6 @@ #include "llvm/ADT/TinyPtrVector.h" #include "llvm/ADT/Triple.h" #include "llvm/ADT/iterator_range.h" -#include "llvm/Support/AlignOf.h" #include "llvm/Support/Allocator.h" #include "llvm/Support/Casting.h" #include "llvm/Support/Compiler.h" diff --git a/clang/include/clang/AST/ASTTypeTraits.h b/clang/include/clang/AST/ASTTypeTraits.h index 8791e41b9ac3..ea3da8d90c5b 100644 --- a/clang/include/clang/AST/ASTTypeTraits.h +++ b/clang/include/clang/AST/ASTTypeTraits.h @@ -22,7 +22,7 @@ #include "clang/AST/TypeLoc.h" #include "clang/Basic/LLVM.h" #include "llvm/ADT/DenseMapInfo.h" -#include "llvm/Support/AlignOf.h" +#include <type_traits> namespace llvm { @@ -456,9 +456,8 @@ class DynTypedNode { /// \c QualTypes, \c NestedNameSpecifierLocs, \c TypeLocs, /// \c TemplateArguments and \c TemplateArgumentLocs on the other hand do not /// have storage or unique pointers and thus need to be stored by value. - llvm::AlignedCharArrayUnion<const void *, TemplateArgument, - TemplateArgumentLoc, NestedNameSpecifierLoc, - QualType, TypeLoc> + std::aligned_union_t<1, const void *, TemplateArgument, TemplateArgumentLoc, + NestedNameSpecifierLoc, QualType, TypeLoc> Storage; }; diff --git a/clang/include/clang/AST/ParentMapContext.h b/clang/include/clang/AST/ParentMapContext.h index a0412380a864..a15790605a3d 100644 --- a/clang/include/clang/AST/ParentMapContext.h +++ b/clang/include/clang/AST/ParentMapContext.h @@ -89,7 +89,7 @@ class TraversalKindScope { /// Container for either a single DynTypedNode or for an ArrayRef to /// DynTypedNode. For use with ParentMap. class DynTypedNodeList { - llvm::AlignedCharArrayUnion<DynTypedNode, ArrayRef<DynTypedNode>> Storage; + std::aligned_union_t<1, DynTypedNode, ArrayRef<DynTypedNode>> Storage; bool IsSingleNode; public: diff --git a/clang/include/clang/Frontend/PrecompiledPreamble.h b/clang/include/clang/Frontend/PrecompiledPreamble.h index cea39bfec95d..1f768310d0b2 100644 --- a/clang/include/clang/Frontend/PrecompiledPreamble.h +++ b/clang/include/clang/Frontend/PrecompiledPreamble.h @@ -17,7 +17,6 @@ #include "clang/Lex/Preprocessor.h" #include "llvm/ADT/IntrusiveRefCntPtr.h" #include "llvm/ADT/StringRef.h" -#include "llvm/Support/AlignOf.h" #include "llvm/Support/MD5.h" #include <cstddef> #include <memory> @@ -198,7 +197,7 @@ class PrecompiledPreamble { private: Kind StorageKind = Kind::Empty; - llvm::AlignedCharArrayUnion<TempPCHFile, InMemoryPreamble> Storage = {}; + std::aligned_union_t<1, TempPCHFile, InMemoryPreamble> Storage = {}; }; /// Data used to determine if a file used in the preamble has been changed. diff --git a/clang/include/clang/Sema/Overload.h b/clang/include/clang/Sema/Overload.h index 5be6a618711c..3c87dfcbb544 100644 --- a/clang/include/clang/Sema/Overload.h +++ b/clang/include/clang/Sema/Overload.h @@ -31,7 +31,6 @@ #include "llvm/ADT/SmallPtrSet.h" #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringRef.h" -#include "llvm/Support/AlignOf.h" #include "llvm/Support/Allocator.h" #include "llvm/Support/Casting.h" #include "llvm/Support/ErrorHandling.h" diff --git a/clang/lib/DirectoryWatcher/linux/DirectoryWatcher-linux.cpp b/clang/lib/DirectoryWatcher/linux/DirectoryWatcher-linux.cpp index 176d6d6abf33..401a0eba1854 100644 --- a/clang/lib/DirectoryWatcher/linux/DirectoryWatcher-linux.cpp +++ b/clang/lib/DirectoryWatcher/linux/DirectoryWatcher-linux.cpp @@ -11,7 +11,6 @@ #include "llvm/ADT/STLExtras.h" #include "llvm/ADT/ScopeExit.h" -#include "llvm/Support/AlignOf.h" #include "llvm/Support/Errno.h" #include "llvm/Support/Error.h" #include "llvm/Support/Path.h" diff --git a/clang/lib/DirectoryWatcher/windows/DirectoryWatcher-windows.cpp b/clang/lib/DirectoryWatcher/windows/DirectoryWatcher-windows.cpp index 25cbcf536388..ba96289c3356 100644 --- a/clang/lib/DirectoryWatcher/windows/DirectoryWatcher-windows.cpp +++ b/clang/lib/DirectoryWatcher/windows/DirectoryWatcher-windows.cpp @@ -14,7 +14,6 @@ #include "llvm/ADT/STLExtras.h" #include "llvm/ADT/ScopeExit.h" -#include "llvm/Support/AlignOf.h" #include "llvm/Support/Errno.h" #include "llvm/Support/Mutex.h" #include "llvm/Support/Path.h" diff --git a/clang/lib/Lex/PPDirectives.cpp b/clang/lib/Lex/PPDirectives.cpp index d6b03d85913d..0280afdb891f 100644 --- a/clang/lib/Lex/PPDirectives.cpp +++ b/clang/lib/Lex/PPDirectives.cpp @@ -39,7 +39,6 @@ #include "llvm/ADT/STLExtras.h" #include "llvm/ADT/StringSwitch.h" #include "llvm/ADT/StringRef.h" -#include "llvm/Support/AlignOf.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/Path.h" #include <algorithm> diff --git a/llvm/include/llvm/ADT/DenseMap.h b/llvm/include/llvm/ADT/DenseMap.h index c9bf762a2406..f591ee07ac00 100644 --- a/llvm/include/llvm/ADT/DenseMap.h +++ b/llvm/include/llvm/ADT/DenseMap.h @@ -15,7 +15,6 @@ #include "llvm/ADT/DenseMapInfo.h" #include "llvm/ADT/EpochTracker.h" -#include "llvm/Support/AlignOf.h" #include "llvm/Support/Compiler.h" #include "llvm/Support/MathExtras.h" #include "llvm/Support/MemAlloc.h" @@ -901,7 +900,7 @@ class SmallDenseMap /// A "union" of an inline bucket array and the struct representing /// a large bucket. This union will be discriminated by the 'Small' bit. - AlignedCharArrayUnion<BucketT[InlineBuckets], LargeRep> storage; + std::aligned_union_t<1, BucketT[InlineBuckets], LargeRep> storage; public: explicit SmallDenseMap(unsigned NumInitBuckets = 0) { @@ -1041,7 +1040,7 @@ class SmallDenseMap if (Small) { // First move the inline buckets into a temporary storage. - AlignedCharArrayUnion<BucketT[InlineBuckets]> TmpStorage; + std::aligned_union_t<1, BucketT[InlineBuckets]> TmpStorage; BucketT *TmpBegin = reinterpret_cast<BucketT *>(&TmpStorage); BucketT *TmpEnd = TmpBegin; diff --git a/llvm/include/llvm/ADT/IntervalMap.h b/llvm/include/llvm/ADT/IntervalMap.h index 0b6c7d667807..7c571db17ce3 100644 --- a/llvm/include/llvm/ADT/IntervalMap.h +++ b/llvm/include/llvm/ADT/IntervalMap.h @@ -101,7 +101,6 @@ #include "llvm/ADT/PointerIntPair.h" #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/bit.h" -#include "llvm/Support/AlignOf.h" #include "llvm/Support/Allocator.h" #include "llvm/Support/RecyclingAllocator.h" #include <algorithm> @@ -109,6 +108,7 @@ #include <cstdint> #include <iterator> #include <new> +#include <type_traits> #include <utility> namespace llvm { @@ -963,7 +963,7 @@ class IntervalMap { private: // The root data is either a RootLeaf or a RootBranchData instance. - AlignedCharArrayUnion<RootLeaf, RootBranchData> data; + std::aligned_union_t<1, RootLeaf, RootBranchData> data; // Tree height. // 0: Leaves in root. diff --git a/llvm/include/llvm/CodeGen/DIE.h b/llvm/include/llvm/CodeGen/DIE.h index 1667cf8cd06d..13a11a77222d 100644 --- a/llvm/include/llvm/CodeGen/DIE.h +++ b/llvm/include/llvm/CodeGen/DIE.h @@ -22,7 +22,6 @@ #include "llvm/ADT/iterator_range.h" #include "llvm/BinaryFormat/Dwarf.h" #include "llvm/CodeGen/DwarfStringPoolEntry.h" -#include "llvm/Support/AlignOf.h" #include "llvm/Support/Allocator.h" #include <cassert> #include <cstddef> @@ -368,9 +367,9 @@ class DIEValue { /// /// All values that aren't standard layout (or are larger than 8 bytes) /// should be stored by reference instead of by value. - using ValTy = AlignedCharArrayUnion<DIEInteger, DIEString, DIEExpr, DIELabel, - DIEDelta *, DIEEntry, DIEBlock *, - DIELoc *, DIELocList, DIEBaseTypeRef *>; + using ValTy = std::aligned_union_t<1, DIEInteger, DIEString, DIEExpr, + DIELabel, DIEDelta *, DIEEntry, DIEBlock *, + DIELoc *, DIELocList, DIEBaseTypeRef *>; static_assert(sizeof(ValTy) <= sizeof(uint64_t) || sizeof(ValTy) <= sizeof(void *), diff --git a/llvm/include/llvm/CodeGen/SelectionDAGNodes.h b/llvm/include/llvm/CodeGen/SelectionDAGNodes.h index 7da81935904d..1e71d110730e 100644 --- a/llvm/include/llvm/CodeGen/SelectionDAGNodes.h +++ b/llvm/include/llvm/CodeGen/SelectionDAGNodes.h @@ -38,7 +38,6 @@ #include "llvm/IR/Instructions.h" #include "llvm/IR/Metadata.h" #include "llvm/IR/Operator.h" -#include "llvm/Support/AlignOf.h" #include "llvm/Support/AtomicOrdering.h" #include "llvm/Support/Casting.h" #include "llvm/Support/ErrorHandling.h" @@ -2628,10 +2627,9 @@ template <> struct GraphTraits<SDNode*> { /// /// This needs to be a union because the largest node diff ers on 32 bit systems /// with 4 and 8 byte pointer alignment, respectively. -using LargestSDNode = AlignedCharArrayUnion<AtomicSDNode, TargetIndexSDNode, - BlockAddressSDNode, - GlobalAddressSDNode, - PseudoProbeSDNode>; +using LargestSDNode = + std::aligned_union_t<1, AtomicSDNode, TargetIndexSDNode, BlockAddressSDNode, + GlobalAddressSDNode, PseudoProbeSDNode>; /// The SDNode class with the greatest alignment requirement. using MostAlignedSDNode = GlobalAddressSDNode; diff --git a/llvm/include/llvm/Support/Error.h b/llvm/include/llvm/Support/Error.h index c0f7c10aefb4..53d65e1dba4c 100644 --- a/llvm/include/llvm/Support/Error.h +++ b/llvm/include/llvm/Support/Error.h @@ -19,7 +19,6 @@ #include "llvm/ADT/StringExtras.h" #include "llvm/ADT/Twine.h" #include "llvm/Config/abi-breaking.h" -#include "llvm/Support/AlignOf.h" #include "llvm/Support/Compiler.h" #include "llvm/Support/Debug.h" #include "llvm/Support/ErrorHandling.h" @@ -678,8 +677,8 @@ template <class T> class LLVM_NODISCARD Expected { } union { - AlignedCharArrayUnion<storage_type> TStorage; - AlignedCharArrayUnion<error_type> ErrorStorage; + std::aligned_union_t<1, storage_type> TStorage; + std::aligned_union_t<1, error_type> ErrorStorage; }; bool HasError : 1; #if LLVM_ENABLE_ABI_BREAKING_CHECKS diff --git a/llvm/include/llvm/Support/ErrorOr.h b/llvm/include/llvm/Support/ErrorOr.h index b654c9c9c43b..d97b549871ac 100644 --- a/llvm/include/llvm/Support/ErrorOr.h +++ b/llvm/include/llvm/Support/ErrorOr.h @@ -15,7 +15,6 @@ #ifndef LLVM_SUPPORT_ERROROR_H #define LLVM_SUPPORT_ERROROR_H -#include "llvm/Support/AlignOf.h" #include <cassert> #include <system_error> #include <type_traits> @@ -253,8 +252,8 @@ class ErrorOr { } union { - AlignedCharArrayUnion<storage_type> TStorage; - AlignedCharArrayUnion<std::error_code> ErrorStorage; + std::aligned_union_t<1, storage_type> TStorage; + std::aligned_union_t<1, std::error_code> ErrorStorage; }; bool HasError : 1; }; diff --git a/llvm/include/llvm/Support/JSON.h b/llvm/include/llvm/Support/JSON.h index c753cee60ec1..13af97032a04 100644 --- a/llvm/include/llvm/Support/JSON.h +++ b/llvm/include/llvm/Support/JSON.h @@ -479,8 +479,8 @@ class Value { }; // All members mutable, see moveFrom(). mutable ValueType Type; - mutable llvm::AlignedCharArrayUnion<bool, double, int64_t, llvm::StringRef, - std::string, json::Array, json::Object> + mutable std::aligned_union_t<1, bool, double, int64_t, llvm::StringRef, + std::string, json::Array, json::Object> Union; friend bool operator==(const Value &, const Value &); }; diff --git a/llvm/include/llvm/Support/TrailingObjects.h b/llvm/include/llvm/Support/TrailingObjects.h index 0d9c4503aa9b..54111fbeba50 100644 --- a/llvm/include/llvm/Support/TrailingObjects.h +++ b/llvm/include/llvm/Support/TrailingObjects.h @@ -46,7 +46,6 @@ #ifndef LLVM_SUPPORT_TRAILINGOBJECTS_H #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" diff --git a/llvm/include/llvm/Support/YAMLTraits.h b/llvm/include/llvm/Support/YAMLTraits.h index a6ee48e13cd0..40a9c0b5ab3f 100644 --- a/llvm/include/llvm/Support/YAMLTraits.h +++ b/llvm/include/llvm/Support/YAMLTraits.h @@ -15,7 +15,6 @@ #include "llvm/ADT/StringMap.h" #include "llvm/ADT/StringRef.h" #include "llvm/ADT/Twine.h" -#include "llvm/Support/AlignOf.h" #include "llvm/Support/Allocator.h" #include "llvm/Support/Endian.h" #include "llvm/Support/Regex.h" @@ -1311,7 +1310,7 @@ struct MappingNormalization { TNorm* operator->() { return BufPtr; } private: - using Storage = AlignedCharArrayUnion<TNorm>; + using Storage = std::aligned_union_t<1, TNorm>; Storage Buffer; IO &io; @@ -1348,7 +1347,7 @@ struct MappingNormalizationHeap { TNorm* operator->() { return BufPtr; } private: - using Storage = AlignedCharArrayUnion<TNorm>; + using Storage = std::aligned_union_t<1, TNorm>; Storage Buffer; IO &io; diff --git a/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp b/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp index 74ba23d343a0..4e560a73676d 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp @@ -26,7 +26,6 @@ #include "llvm/IR/PatternMatch.h" #include "llvm/IR/Type.h" #include "llvm/IR/Value.h" -#include "llvm/Support/AlignOf.h" #include "llvm/Support/Casting.h" #include "llvm/Support/KnownBits.h" #include "llvm/Transforms/InstCombine/InstCombiner.h" @@ -120,7 +119,7 @@ namespace { // is overkill of this end. short IntVal = 0; - AlignedCharArrayUnion<APFloat> FpValBuf; + std::aligned_union_t<1, APFloat> FpValBuf; }; /// FAddend is used to represent floating-point addend. An addend is _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits