summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAaron Smith <aaron.smith@microsoft.com>2018-03-07 00:35:27 +0000
committerAaron Smith <aaron.smith@microsoft.com>2018-03-07 00:35:27 +0000
commit7abdf2d24f0a4c24e1692119286145009ccc344e (patch)
tree65b16f16a52722185ada21681b2c0048ea6fd01f
parent25409ddf2a053bd179f53e450a926bb5650f09af (diff)
downloadbcm5719-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.test12
-rw-r--r--lldb/source/Plugins/SymbolFile/PDB/PDBASTParser.cpp20
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,
OpenPOWER on IntegriCloud