Index: llvm/include/llvm/DebugInfo/PDB/Native/NativeCompilandSymbol.h =================================================================== --- llvm/include/llvm/DebugInfo/PDB/Native/NativeCompilandSymbol.h +++ llvm/include/llvm/DebugInfo/PDB/Native/NativeCompilandSymbol.h @@ -18,7 +18,11 @@ class NativeCompilandSymbol : public NativeRawSymbol { public: - NativeCompilandSymbol(NativeSession &Session, DbiModuleDescriptor MI); + NativeCompilandSymbol(NativeSession &Session, uint32_t SymbolId, + DbiModuleDescriptor MI); + + std::unique_ptr clone() const override; + PDB_SymType getSymTag() const override; bool isEditAndContinueEnabled() const override; uint32_t getLexicalParentId() const override; Index: llvm/include/llvm/DebugInfo/PDB/Native/NativeExeSymbol.h =================================================================== --- llvm/include/llvm/DebugInfo/PDB/Native/NativeExeSymbol.h +++ llvm/include/llvm/DebugInfo/PDB/Native/NativeExeSymbol.h @@ -18,7 +18,9 @@ class NativeExeSymbol : public NativeRawSymbol { public: - NativeExeSymbol(NativeSession &Session); + NativeExeSymbol(NativeSession &Session, uint32_t SymbolId); + + std::unique_ptr clone() const override; std::unique_ptr findChildren(PDB_SymType Type) const override; Index: llvm/include/llvm/DebugInfo/PDB/Native/NativeRawSymbol.h =================================================================== --- llvm/include/llvm/DebugInfo/PDB/Native/NativeRawSymbol.h +++ llvm/include/llvm/DebugInfo/PDB/Native/NativeRawSymbol.h @@ -19,7 +19,9 @@ class NativeRawSymbol : public IPDBRawSymbol { public: - explicit NativeRawSymbol(NativeSession &PDBSession); + NativeRawSymbol(NativeSession &PDBSession, uint32_t SymbolId); + + virtual std::unique_ptr clone() const = 0; void dump(raw_ostream &OS, int Indent) const override; @@ -201,6 +203,7 @@ protected: NativeSession &Session; + uint32_t SymbolId; }; } Index: llvm/lib/DebugInfo/PDB/Native/NativeCompilandSymbol.cpp =================================================================== --- llvm/lib/DebugInfo/PDB/Native/NativeCompilandSymbol.cpp +++ llvm/lib/DebugInfo/PDB/Native/NativeCompilandSymbol.cpp @@ -13,13 +13,18 @@ namespace pdb { NativeCompilandSymbol::NativeCompilandSymbol(NativeSession &Session, + uint32_t SymbolId, DbiModuleDescriptor MI) - : NativeRawSymbol(Session), Module(MI) {} + : NativeRawSymbol(Session, SymbolId), Module(MI) {} PDB_SymType NativeCompilandSymbol::getSymTag() const { return PDB_SymType::Compiland; } +std::unique_ptr NativeCompilandSymbol::clone() const { + return std::make_unique(Session, SymbolId, Module); +} + bool NativeCompilandSymbol::isEditAndContinueEnabled() const { return Module.hasECInfo(); } Index: llvm/lib/DebugInfo/PDB/Native/NativeEnumModules.cpp =================================================================== --- llvm/lib/DebugInfo/PDB/Native/NativeEnumModules.cpp +++ llvm/lib/DebugInfo/PDB/Native/NativeEnumModules.cpp @@ -34,7 +34,7 @@ return nullptr; return std::unique_ptr(new PDBSymbolCompiland( Session, std::unique_ptr(new NativeCompilandSymbol( - Session, Modules.getModuleDescriptor(Index))))); + Session, 0, Modules.getModuleDescriptor(Index))))); } std::unique_ptr NativeEnumModules::getNext() { Index: llvm/lib/DebugInfo/PDB/Native/NativeExeSymbol.cpp =================================================================== --- llvm/lib/DebugInfo/PDB/Native/NativeExeSymbol.cpp +++ llvm/lib/DebugInfo/PDB/Native/NativeExeSymbol.cpp @@ -17,8 +17,12 @@ namespace llvm { namespace pdb { -NativeExeSymbol::NativeExeSymbol(NativeSession &Session) - : NativeRawSymbol(Session), File(Session.getPDBFile()) {} +NativeExeSymbol::NativeExeSymbol(NativeSession &Session, uint32_t SymbolId) + : NativeRawSymbol(Session, SymbolId), File(Session.getPDBFile()) {} + +std::unique_ptr NativeExeSymbol::clone() const { + return std::make_unique(Session, SymbolId); +} std::unique_ptr NativeExeSymbol::findChildren(PDB_SymType Type) const { Index: llvm/lib/DebugInfo/PDB/Native/NativeRawSymbol.cpp =================================================================== --- llvm/lib/DebugInfo/PDB/Native/NativeRawSymbol.cpp +++ llvm/lib/DebugInfo/PDB/Native/NativeRawSymbol.cpp @@ -22,8 +22,8 @@ using namespace llvm; using namespace llvm::pdb; -NativeRawSymbol::NativeRawSymbol(NativeSession &PDBSession) - : Session(PDBSession) {} +NativeRawSymbol::NativeRawSymbol(NativeSession &PDBSession, uint32_t SymbolId) + : Session(PDBSession), SymbolId(SymbolId) {} void NativeRawSymbol::dump(raw_ostream &OS, int Indent) const {} @@ -253,9 +253,7 @@ std::string NativeRawSymbol::getSymbolsFileName() const { return ""; } -uint32_t NativeRawSymbol::getSymIndexId() const { - return 0; -} +uint32_t NativeRawSymbol::getSymIndexId() const { return SymbolId; } uint32_t NativeRawSymbol::getTargetOffset() const { return 0; Index: llvm/lib/DebugInfo/PDB/Native/NativeSession.cpp =================================================================== --- llvm/lib/DebugInfo/PDB/Native/NativeSession.cpp +++ llvm/lib/DebugInfo/PDB/Native/NativeSession.cpp @@ -71,7 +71,7 @@ void NativeSession::setLoadAddress(uint64_t Address) {} std::unique_ptr NativeSession::getGlobalScope() { - auto RawSymbol = llvm::make_unique(*this); + auto RawSymbol = llvm::make_unique(*this, 0); auto PdbSymbol(PDBSymbol::create(*this, std::move(RawSymbol))); std::unique_ptr ExeSymbol( static_cast(PdbSymbol.release()));