Index: llvm/trunk/include/llvm/DebugInfo/PDB/DIA/DIARawSymbol.h =================================================================== --- llvm/trunk/include/llvm/DebugInfo/PDB/DIA/DIARawSymbol.h +++ llvm/trunk/include/llvm/DebugInfo/PDB/DIA/DIARawSymbol.h @@ -103,6 +103,7 @@ uint32_t getSizeInUdt() const override; uint32_t getSlot() const override; std::string getSourceFileName() const override; + std::unique_ptr getSrcLineOnTypeDefn() const override; uint32_t getStride() const override; uint32_t getSubTypeId() const override; std::string getSymbolsFileName() const override; Index: llvm/trunk/include/llvm/DebugInfo/PDB/IPDBRawSymbol.h =================================================================== --- llvm/trunk/include/llvm/DebugInfo/PDB/IPDBRawSymbol.h +++ llvm/trunk/include/llvm/DebugInfo/PDB/IPDBRawSymbol.h @@ -115,6 +115,8 @@ virtual uint32_t getSizeInUdt() const = 0; virtual uint32_t getSlot() const = 0; virtual std::string getSourceFileName() const = 0; + virtual std::unique_ptr + getSrcLineOnTypeDefn() const = 0; virtual uint32_t getStride() const = 0; virtual uint32_t getSubTypeId() const = 0; virtual std::string getSymbolsFileName() const = 0; Index: llvm/trunk/include/llvm/DebugInfo/PDB/Native/NativeRawSymbol.h =================================================================== --- llvm/trunk/include/llvm/DebugInfo/PDB/Native/NativeRawSymbol.h +++ llvm/trunk/include/llvm/DebugInfo/PDB/Native/NativeRawSymbol.h @@ -108,6 +108,7 @@ uint32_t getSizeInUdt() const override; uint32_t getSlot() const override; std::string getSourceFileName() const override; + std::unique_ptr getSrcLineOnTypeDefn() const override; uint32_t getStride() const override; uint32_t getSubTypeId() const override; std::string getSymbolsFileName() const override; Index: llvm/trunk/lib/DebugInfo/PDB/DIA/DIARawSymbol.cpp =================================================================== --- llvm/trunk/lib/DebugInfo/PDB/DIA/DIARawSymbol.cpp +++ llvm/trunk/lib/DebugInfo/PDB/DIA/DIARawSymbol.cpp @@ -13,6 +13,7 @@ #include "llvm/DebugInfo/CodeView/Formatters.h" #include "llvm/DebugInfo/PDB/DIA/DIAEnumLineNumbers.h" #include "llvm/DebugInfo/PDB/DIA/DIAEnumSymbols.h" +#include "llvm/DebugInfo/PDB/DIA/DIALineNumber.h" #include "llvm/DebugInfo/PDB/DIA/DIASession.h" #include "llvm/DebugInfo/PDB/PDBExtras.h" #include "llvm/DebugInfo/PDB/PDBSymbolTypeBuiltin.h" @@ -748,6 +749,15 @@ return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_sourceFileName); } +std::unique_ptr +DIARawSymbol::getSrcLineOnTypeDefn() const { + CComPtr LineNumber; + if (FAILED(Symbol->getSrcLineOnTypeDefn(&LineNumber)) || !LineNumber) + return nullptr; + + return llvm::make_unique(LineNumber); +} + uint32_t DIARawSymbol::getStride() const { return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_stride); } Index: llvm/trunk/lib/DebugInfo/PDB/Native/NativeRawSymbol.cpp =================================================================== --- llvm/trunk/lib/DebugInfo/PDB/Native/NativeRawSymbol.cpp +++ llvm/trunk/lib/DebugInfo/PDB/Native/NativeRawSymbol.cpp @@ -7,6 +7,7 @@ // //===----------------------------------------------------------------------===// +#include "llvm/DebugInfo/PDB/IPDBLineNumber.h" #include "llvm/DebugInfo/PDB/Native/NativeRawSymbol.h" #include "llvm/DebugInfo/PDB/PDBSymbolTypeBuiltin.h" @@ -278,6 +279,11 @@ return {}; } +std::unique_ptr +NativeRawSymbol::getSrcLineOnTypeDefn() const { + return nullptr; +} + uint32_t NativeRawSymbol::getStride() const { return 0; } Index: llvm/trunk/unittests/DebugInfo/PDB/PDBApiTest.cpp =================================================================== --- llvm/trunk/unittests/DebugInfo/PDB/PDBApiTest.cpp +++ llvm/trunk/unittests/DebugInfo/PDB/PDBApiTest.cpp @@ -11,6 +11,7 @@ #include "llvm/ADT/STLExtras.h" #include "llvm/DebugInfo/PDB/IPDBEnumChildren.h" +#include "llvm/DebugInfo/PDB/IPDBLineNumber.h" #include "llvm/DebugInfo/PDB/IPDBRawSymbol.h" #include "llvm/DebugInfo/PDB/IPDBSession.h" #include "llvm/DebugInfo/PDB/IPDBSourceFile.h" @@ -195,6 +196,10 @@ return {}; } + std::unique_ptr getSrcLineOnTypeDefn() const override { + return nullptr; + } + MOCK_SYMBOL_ACCESSOR(getAccess) MOCK_SYMBOL_ACCESSOR(getAddressOffset) MOCK_SYMBOL_ACCESSOR(getAddressSection)