Index: include/llvm/CodeGen/AccelTable.h =================================================================== --- include/llvm/CodeGen/AccelTable.h +++ include/llvm/CodeGen/AccelTable.h @@ -129,9 +129,9 @@ /// specification of the form of its data. struct Atom { /// Atom Type. - const uint16_t Type; + uint16_t Type; /// DWARF Form. - const uint16_t Form; + uint16_t Form; constexpr Atom(uint16_t Type, uint16_t Form) : Type(Type), Form(Form) {} @@ -153,10 +153,10 @@ /// base is used to describe the offset for all forms in the list of atoms. uint32_t DieOffsetBase; - SmallVector Atoms; + const SmallVector Atoms; - HeaderData(ArrayRef AtomList, uint32_t Offset = 0) - : DieOffsetBase(Offset), Atoms(AtomList.begin(), AtomList.end()) {} + HeaderData(const SmallVectorImpl &Atoms, uint32_t Offset = 0) + : DieOffsetBase(Offset), Atoms(Atoms.begin(), Atoms.end()) {} #ifndef NDEBUG void print(raw_ostream &OS) const { @@ -174,7 +174,7 @@ public: /// The length of the header data is always going to be 4 + 4 + 4*NumAtoms. - AppleAccelTableHeader(ArrayRef Atoms) + AppleAccelTableHeader(const SmallVectorImpl &Atoms) : Header(8 + (Atoms.size() * 4)), HeaderData(Atoms) {} /// Update header with hash and bucket count. @@ -270,7 +270,7 @@ using BucketList = std::vector; BucketList Buckets; - AppleAccelTableBase(ArrayRef Atoms) + AppleAccelTableBase(const SmallVectorImpl &Atoms) : Header(Atoms), Entries(Allocator) {} private: @@ -368,9 +368,7 @@ void emit(AsmPrinter *Asm) const override; - static constexpr const AppleAccelTableHeader::Atom Atoms[] = { - AppleAccelTableHeader::Atom(dwarf::DW_ATOM_die_offset, - dwarf::DW_FORM_data4)}; + static const SmallVector Atoms; #ifndef NDEBUG void print(raw_ostream &OS) const override { @@ -391,12 +389,7 @@ void emit(AsmPrinter *Asm) const override; - static constexpr const AppleAccelTableHeader::Atom Atoms[] = { - AppleAccelTableHeader::Atom(dwarf::DW_ATOM_die_offset, - dwarf::DW_FORM_data4), - AppleAccelTableHeader::Atom(dwarf::DW_ATOM_die_tag, dwarf::DW_FORM_data2), - AppleAccelTableHeader::Atom(dwarf::DW_ATOM_type_flags, - dwarf::DW_FORM_data1)}; + static const SmallVector Atoms; #ifndef NDEBUG void print(raw_ostream &OS) const override { @@ -414,9 +407,7 @@ void emit(AsmPrinter *Asm) const override; - static constexpr const AppleAccelTableHeader::Atom Atoms[] = { - AppleAccelTableHeader::Atom(dwarf::DW_ATOM_die_offset, - dwarf::DW_FORM_data4)}; + static const SmallVector Atoms; #ifndef NDEBUG void print(raw_ostream &OS) const override { @@ -443,12 +434,7 @@ void emit(AsmPrinter *Asm) const override; - static constexpr const AppleAccelTableHeader::Atom Atoms[] = { - AppleAccelTableHeader::Atom(dwarf::DW_ATOM_die_offset, - dwarf::DW_FORM_data4), - AppleAccelTableHeader::Atom(dwarf::DW_ATOM_die_tag, dwarf::DW_FORM_data2), - AppleAccelTableHeader::Atom(5, dwarf::DW_FORM_data1), - AppleAccelTableHeader::Atom(6, dwarf::DW_FORM_data4)}; + static const SmallVector Atoms; #ifndef NDEBUG void print(raw_ostream &OS) const override { Index: lib/CodeGen/AsmPrinter/AccelTable.cpp =================================================================== --- lib/CodeGen/AsmPrinter/AccelTable.cpp +++ lib/CodeGen/AsmPrinter/AccelTable.cpp @@ -70,11 +70,6 @@ Header.HashCount = HashCount; } -constexpr const AppleAccelTableHeader::Atom AppleAccelTableTypeData::Atoms[]; -constexpr const AppleAccelTableHeader::Atom AppleAccelTableOffsetData::Atoms[]; -constexpr const AppleAccelTableHeader::Atom AppleAccelTableStaticOffsetData::Atoms[]; -constexpr const AppleAccelTableHeader::Atom AppleAccelTableStaticTypeData::Atoms[]; - void AppleAccelTableBase::emitHeader(AsmPrinter *Asm) { Header.emit(Asm); } void AppleAccelTableBase::emitBuckets(AsmPrinter *Asm) { @@ -233,3 +228,29 @@ : 0); Asm->EmitInt32(QualifiedNameHash); } + +const SmallVector + AppleAccelTableOffsetData::Atoms = {AppleAccelTableHeader::Atom( + dwarf::DW_ATOM_die_offset, dwarf::DW_FORM_data4)}; + +const SmallVector + AppleAccelTableTypeData::Atoms = { + AppleAccelTableHeader::Atom(dwarf::DW_ATOM_die_offset, + dwarf::DW_FORM_data4), + AppleAccelTableHeader::Atom(dwarf::DW_ATOM_die_tag, + dwarf::DW_FORM_data2), + AppleAccelTableHeader::Atom(dwarf::DW_ATOM_type_flags, + dwarf::DW_FORM_data1)}; + +const SmallVector + AppleAccelTableStaticOffsetData::Atoms = {AppleAccelTableHeader::Atom( + dwarf::DW_ATOM_die_offset, dwarf::DW_FORM_data4)}; + +const SmallVector + AppleAccelTableStaticTypeData::Atoms = { + AppleAccelTableHeader::Atom(dwarf::DW_ATOM_die_offset, + dwarf::DW_FORM_data4), + AppleAccelTableHeader::Atom(dwarf::DW_ATOM_die_tag, + dwarf::DW_FORM_data2), + AppleAccelTableHeader::Atom(5, dwarf::DW_FORM_data1), + AppleAccelTableHeader::Atom(6, dwarf::DW_FORM_data4)};