diff options
| author | Aaron Smith <aaron.smith@microsoft.com> | 2018-03-07 00:35:27 +0000 |
|---|---|---|
| committer | Aaron Smith <aaron.smith@microsoft.com> | 2018-03-07 00:35:27 +0000 |
| commit | 7abdf2d24f0a4c24e1692119286145009ccc344e (patch) | |
| tree | 65b16f16a52722185ada21681b2c0048ea6fd01f | |
| parent | 25409ddf2a053bd179f53e450a926bb5650f09af (diff) | |
| download | bcm5719-llvm-7abdf2d24f0a4c24e1692119286145009ccc344e.tar.gz bcm5719-llvm-7abdf2d24f0a4c24e1692119286145009ccc344e.zip | |
[SymbolFilePDB] Get line number for PDBSymbolTypeEnum
Reviewers: zturner, lldb-commits, rnk
Reviewed By: zturner
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D44164
llvm-svn: 326858
| -rw-r--r-- | lldb/lit/SymbolFile/PDB/enums-layout.test | 12 | ||||
| -rw-r--r-- | lldb/source/Plugins/SymbolFile/PDB/PDBASTParser.cpp | 20 |
2 files changed, 18 insertions, 14 deletions
diff --git a/lldb/lit/SymbolFile/PDB/enums-layout.test b/lldb/lit/SymbolFile/PDB/enums-layout.test index 2156a177139..ce0b23f453b 100644 --- a/lldb/lit/SymbolFile/PDB/enums-layout.test +++ b/lldb/lit/SymbolFile/PDB/enums-layout.test @@ -8,35 +8,35 @@ RUN: lldb-test symbols %T/SimpleTypesTest.cpp.enums.exe | FileCheck %s CHECK: Module [[CU:.*]] CHECK-DAG: {{^[0-9A-F]+}}: SymbolVendor ([[CU]]) -CHECK: Type{{.*}} , name = "Enum", size = 4, compiler_type = {{.*}} enum Enum { +CHECK: Type{{.*}} , name = "Enum", size = 4, decl = SimpleTypesTest.cpp:19, compiler_type = {{.*}} enum Enum { CHECK-NEXT: RED, CHECK-NEXT: GREEN, CHECK-NEXT: BLUE CHECK-NEXT:} -CHECK: Type{{.*}} , name = "EnumConst", size = 4, compiler_type = {{.*}} enum EnumConst { +CHECK: Type{{.*}} , name = "EnumConst", size = 4, decl = SimpleTypesTest.cpp:22, compiler_type = {{.*}} enum EnumConst { CHECK-NEXT: LOW, CHECK-NEXT: NORMAL, CHECK-NEXT: HIGH CHECK-NEXT:} -CHECK: Type{{.*}} , name = "EnumEmpty", size = 4, compiler_type = {{.*}} enum EnumEmpty { +CHECK: Type{{.*}} , name = "EnumEmpty", size = 4, decl = SimpleTypesTest.cpp:25, compiler_type = {{.*}} enum EnumEmpty { CHECK-NEXT:} -CHECK: Type{{.*}} , name = "EnumUChar", size = 1, compiler_type = {{.*}} enum EnumUChar { +CHECK: Type{{.*}} , name = "EnumUChar", size = 1, decl = SimpleTypesTest.cpp:28, compiler_type = {{.*}} enum EnumUChar { CHECK-NEXT: ON, CHECK-NEXT: OFF, CHECK-NEXT: AUTO CHECK-NEXT:} ; Note that `enum EnumClass` is tested instead of `enum class EnumClass` -CHECK: Type{{.*}} , name = "EnumClass", size = 4, compiler_type = {{.*}} enum EnumClass { +CHECK: Type{{.*}} , name = "EnumClass", size = 4, decl = SimpleTypesTest.cpp:32, compiler_type = {{.*}} enum EnumClass { CHECK-NEXT: YES, CHECK-NEXT: NO, CHECK-NEXT: DEFAULT CHECK-NEXT:} -CHECK: Type{{.*}} , name = "EnumStruct", size = 4, compiler_type = {{.*}} enum EnumStruct { +CHECK: Type{{.*}} , name = "EnumStruct", size = 4, decl = SimpleTypesTest.cpp:35, compiler_type = {{.*}} enum EnumStruct { CHECK-NEXT: red, CHECK-NEXT: blue, CHECK-NEXT: black diff --git a/lldb/source/Plugins/SymbolFile/PDB/PDBASTParser.cpp b/lldb/source/Plugins/SymbolFile/PDB/PDBASTParser.cpp index b870b75bb0a..4a73649deb2 100644 --- a/lldb/source/Plugins/SymbolFile/PDB/PDBASTParser.cpp +++ b/lldb/source/Plugins/SymbolFile/PDB/PDBASTParser.cpp @@ -170,14 +170,17 @@ ConstString GetPDBBuiltinTypeName(const PDBSymbolTypeBuiltin *pdb_type, bool GetDeclarationForSymbol(const PDBSymbol &symbol, Declaration &decl) { auto &raw_sym = symbol.getRawSymbol(); - auto lines_up = symbol.getSession().findLineNumbersByAddress( - raw_sym.getVirtualAddress(), raw_sym.getLength()); - if (!lines_up) - return false; - auto first_line_up = lines_up->getNext(); - if (!first_line_up) - return false; - + auto first_line_up = raw_sym.getSrcLineOnTypeDefn(); + + if (!first_line_up) { + auto lines_up = symbol.getSession().findLineNumbersByAddress( + raw_sym.getVirtualAddress(), raw_sym.getLength()); + if (!lines_up) + return false; + first_line_up = lines_up->getNext(); + if (!first_line_up) + return false; + } uint32_t src_file_id = first_line_up->getSourceFileId(); auto src_file_up = symbol.getSession().getSourceFileById(src_file_id); if (!src_file_up) @@ -269,6 +272,7 @@ lldb::TypeSP PDBASTParser::CreateLLDBTypeFromPDBType(const PDBSymbol &type) { if (ClangASTContext::StartTagDeclarationDefinition(ast_enum)) ClangASTContext::CompleteTagDeclarationDefinition(ast_enum); + GetDeclarationForSymbol(type, decl); return std::make_shared<lldb_private::Type>( type.getSymIndexId(), m_ast.GetSymbolFile(), ConstString(name), bytes, nullptr, LLDB_INVALID_UID, lldb_private::Type::eEncodingIsUID, decl, |

