Index: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolFunc.h =================================================================== --- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolFunc.h +++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolFunc.h @@ -10,6 +10,7 @@ #ifndef LLVM_DEBUGINFO_PDB_PDBSYMBOLFUNC_H #define LLVM_DEBUGINFO_PDB_PDBSYMBOLFUNC_H +#include "IPDBLineNumber.h" #include "PDBSymbol.h" #include "PDBSymbolTypeFunctionSig.h" #include "PDBTypes.h" @@ -76,6 +77,9 @@ FORWARD_SYMBOL_METHOD(getVirtualAddress) FORWARD_SYMBOL_METHOD(getVirtualBaseOffset) FORWARD_SYMBOL_METHOD(isVolatileType) + + std::unique_ptr getLineNumbers() const; + uint32_t getCompilandId() const; }; } // namespace llvm Index: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeEnum.h =================================================================== --- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeEnum.h +++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeEnum.h @@ -10,6 +10,7 @@ #ifndef LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPEENUM_H #define LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPEENUM_H +#include "IPDBLineNumber.h" #include "PDBSymbol.h" #include "PDBSymbolTypeBuiltin.h" #include "PDBTypes.h" @@ -38,6 +39,7 @@ FORWARD_SYMBOL_METHOD(getLength) FORWARD_SYMBOL_ID_METHOD(getLexicalParent) FORWARD_SYMBOL_METHOD(getName) + FORWARD_SYMBOL_METHOD(getSrcLineOnTypeDefn) FORWARD_SYMBOL_METHOD(isNested) FORWARD_SYMBOL_METHOD(hasOverloadedOperator) FORWARD_SYMBOL_METHOD(isPacked) Index: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypePointer.h =================================================================== --- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypePointer.h +++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypePointer.h @@ -32,7 +32,11 @@ FORWARD_SYMBOL_METHOD(getLength) FORWARD_SYMBOL_ID_METHOD(getLexicalParent) FORWARD_SYMBOL_METHOD(isReference) + FORWARD_SYMBOL_METHOD(isRValueReference) + FORWARD_SYMBOL_METHOD(isPointerToDataMember) + FORWARD_SYMBOL_METHOD(isPointerToMemberFunction) FORWARD_SYMBOL_ID_METHOD_WITH_NAME(getType, getPointeeType) + FORWARD_SYMBOL_METHOD(isRestrictedType) FORWARD_SYMBOL_METHOD(isUnalignedType) FORWARD_SYMBOL_METHOD(isVolatileType) }; Index: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeUDT.h =================================================================== --- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeUDT.h +++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeUDT.h @@ -10,6 +10,7 @@ #ifndef LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPEUDT_H #define LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPEUDT_H +#include "IPDBLineNumber.h" #include "IPDBSession.h" #include "PDBSymbol.h" #include "PDBSymbolTypeBaseClass.h" @@ -45,6 +46,7 @@ FORWARD_SYMBOL_METHOD(getLength) FORWARD_SYMBOL_ID_METHOD(getLexicalParent) FORWARD_SYMBOL_METHOD(getName) + FORWARD_SYMBOL_METHOD(getSrcLineOnTypeDefn) FORWARD_SYMBOL_METHOD(isNested) FORWARD_SYMBOL_METHOD(hasOverloadedOperator) FORWARD_SYMBOL_METHOD(isPacked) @@ -53,6 +55,7 @@ FORWARD_SYMBOL_METHOD(isUnalignedType) FORWARD_SYMBOL_ID_METHOD(getVirtualTableShape) FORWARD_SYMBOL_METHOD(isVolatileType) + FORWARD_SYMBOL_METHOD(getAccess) }; } } // namespace llvm Index: llvm/trunk/lib/DebugInfo/PDB/PDBSymbolFunc.cpp =================================================================== --- llvm/trunk/lib/DebugInfo/PDB/PDBSymbolFunc.cpp +++ llvm/trunk/lib/DebugInfo/PDB/PDBSymbolFunc.cpp @@ -105,3 +105,18 @@ return true; return false; } + +std::unique_ptr PDBSymbolFunc::getLineNumbers() const { + auto Len = RawSymbol->getLength(); + return Session.findLineNumbersByAddress(RawSymbol->getVirtualAddress(), + Len ? Len : 1); +} + +uint32_t PDBSymbolFunc::getCompilandId() const { + if (auto Lines = getLineNumbers()) { + if (auto FirstLine = Lines->getNext()) { + return FirstLine->getCompilandId(); + } + } + return 0; +}