Skip to content

Commit

Permalink
ADT: Migrate users of AlignedCharArrayUnion to std::aligned_union_t, NFC
Browse files Browse the repository at this point in the history
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
  • Loading branch information
dexonsmith committed Dec 4, 2020
1 parent fa4c3f7 commit d10f986
Show file tree
Hide file tree
Showing 19 changed files with 29 additions and 44 deletions.
9 changes: 5 additions & 4 deletions clang/include/clang/AST/APValue.h
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down
1 change: 0 additions & 1 deletion clang/include/clang/AST/ASTContext.h
Expand Up @@ -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"
Expand Down
7 changes: 3 additions & 4 deletions clang/include/clang/AST/ASTTypeTraits.h
Expand Up @@ -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 {

Expand Down Expand Up @@ -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;
};

Expand Down
2 changes: 1 addition & 1 deletion clang/include/clang/AST/ParentMapContext.h
Expand Up @@ -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:
Expand Down
3 changes: 1 addition & 2 deletions clang/include/clang/Frontend/PrecompiledPreamble.h
Expand Up @@ -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>
Expand Down Expand Up @@ -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.
Expand Down
1 change: 0 additions & 1 deletion clang/include/clang/Sema/Overload.h
Expand Up @@ -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"
Expand Down
Expand Up @@ -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"
Expand Down
Expand Up @@ -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"
Expand Down
1 change: 0 additions & 1 deletion clang/lib/Lex/PPDirectives.cpp
Expand Up @@ -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>
Expand Down
5 changes: 2 additions & 3 deletions llvm/include/llvm/ADT/DenseMap.h
Expand Up @@ -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"
Expand Down Expand Up @@ -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) {
Expand Down Expand Up @@ -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;

Expand Down
4 changes: 2 additions & 2 deletions llvm/include/llvm/ADT/IntervalMap.h
Expand Up @@ -101,14 +101,14 @@
#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>
#include <cassert>
#include <cstdint>
#include <iterator>
#include <new>
#include <type_traits>
#include <utility>

namespace llvm {
Expand Down Expand Up @@ -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.
Expand Down
7 changes: 3 additions & 4 deletions llvm/include/llvm/CodeGen/DIE.h
Expand Up @@ -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>
Expand Down Expand Up @@ -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 *),
Expand Down
8 changes: 3 additions & 5 deletions llvm/include/llvm/CodeGen/SelectionDAGNodes.h
Expand Up @@ -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"
Expand Down Expand Up @@ -2628,10 +2627,9 @@ template <> struct GraphTraits<SDNode*> {
///
/// This needs to be a union because the largest node differs 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;
Expand Down
5 changes: 2 additions & 3 deletions llvm/include/llvm/Support/Error.h
Expand Up @@ -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"
Expand Down Expand Up @@ -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
Expand Down
5 changes: 2 additions & 3 deletions llvm/include/llvm/Support/ErrorOr.h
Expand Up @@ -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>
Expand Down Expand Up @@ -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;
};
Expand Down
4 changes: 2 additions & 2 deletions llvm/include/llvm/Support/JSON.h
Expand Up @@ -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 &);
};
Expand Down
1 change: 0 additions & 1 deletion llvm/include/llvm/Support/TrailingObjects.h
Expand Up @@ -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"
Expand Down
5 changes: 2 additions & 3 deletions llvm/include/llvm/Support/YAMLTraits.h
Expand Up @@ -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"
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down
3 changes: 1 addition & 2 deletions llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp
Expand Up @@ -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"
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit d10f986

Please sign in to comment.