Index: include/llvm/CodeGen/AccelTable.h =================================================================== --- include/llvm/CodeGen/AccelTable.h +++ include/llvm/CodeGen/AccelTable.h @@ -153,10 +153,15 @@ /// base is used to describe the offset for all forms in the list of atoms. uint32_t DieOffsetBase; - SmallVector Atoms; + const SmallVector Atoms; +#ifndef _MSC_VER HeaderData(ArrayRef AtomList, uint32_t Offset = 0) : DieOffsetBase(Offset), Atoms(AtomList.begin(), AtomList.end()) {} +#else + HeaderData(const SmallVectorImpl &Atoms, uint32_t Offset = 0) + : DieOffsetBase(Offset), Atoms(Atoms.begin(), Atoms.end()) {} +#endif #ifndef NDEBUG void print(raw_ostream &OS) const { @@ -174,8 +179,13 @@ public: /// The length of the header data is always going to be 4 + 4 + 4*NumAtoms. +#ifndef _MSC_VER AppleAccelTableHeader(ArrayRef Atoms) : Header(8 + (Atoms.size() * 4)), HeaderData(Atoms) {} +#else + AppleAccelTableHeader(const SmallVectorImpl &Atoms) + : Header(8 + (Atoms.size() * 4)), HeaderData(Atoms) {} +#endif /// Update header with hash and bucket count. void setBucketAndHashCount(uint32_t HashCount); @@ -270,8 +280,13 @@ using BucketList = std::vector; BucketList Buckets; +#ifndef _MSC_VER AppleAccelTableBase(ArrayRef Atoms) : Header(Atoms), Entries(Allocator) {} +#else + AppleAccelTableBase(const SmallVectorImpl &Atoms) + : Header(Atoms), Entries(Allocator) {} +#endif private: /// Emits the header for the table via the AsmPrinter. @@ -368,9 +383,13 @@ void emit(AsmPrinter *Asm) const override; - static constexpr const AppleAccelTableHeader::Atom Atoms[] = { +#ifndef _MSC_VER + static constexpr AppleAccelTableHeader::Atom Atoms[] = { AppleAccelTableHeader::Atom(dwarf::DW_ATOM_die_offset, dwarf::DW_FORM_data4)}; +#else + static const SmallVector Atoms; +#endif #ifndef NDEBUG void print(raw_ostream &OS) const override { @@ -391,12 +410,16 @@ void emit(AsmPrinter *Asm) const override; - static constexpr const AppleAccelTableHeader::Atom Atoms[] = { +#ifndef _MSC_VER + static constexpr 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)}; +#else + static const SmallVector Atoms; +#endif #ifndef NDEBUG void print(raw_ostream &OS) const override { @@ -414,9 +437,13 @@ void emit(AsmPrinter *Asm) const override; - static constexpr const AppleAccelTableHeader::Atom Atoms[] = { +#ifndef _MSC_VER + static constexpr AppleAccelTableHeader::Atom Atoms[] = { AppleAccelTableHeader::Atom(dwarf::DW_ATOM_die_offset, dwarf::DW_FORM_data4)}; +#else + static const SmallVector Atoms; +#endif #ifndef NDEBUG void print(raw_ostream &OS) const override { @@ -443,12 +470,16 @@ void emit(AsmPrinter *Asm) const override; - static constexpr const AppleAccelTableHeader::Atom Atoms[] = { +#ifndef _MSC_VER + static constexpr 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)}; +#else + static const SmallVector Atoms; +#endif #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,35 @@ : 0); Asm->EmitInt32(QualifiedNameHash); } + +#ifndef _MSC_VER +constexpr const AppleAccelTableHeader::Atom AppleAccelTableTypeData::Atoms[]; +constexpr const AppleAccelTableHeader::Atom AppleAccelTableOffsetData::Atoms[]; +constexpr const AppleAccelTableHeader::Atom + AppleAccelTableStaticOffsetData::Atoms[]; +constexpr const AppleAccelTableHeader::Atom + AppleAccelTableStaticTypeData::Atoms[]; +#else +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)}; +#endif