jankratochvil created this revision.
jankratochvil added reviewers: labath, clayborg.
jankratochvil added a project: LLDB.
Herald added subscribers: arphaman, aprantl.
Herald added a reviewer: jdoerfert.
Herald added a reviewer: shafik.
It removes some needless deep indentation and some redundant statements.
It prepares the code for a more clean next patch - DWARF index callbacks.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D77326
Files:
lldb/source/Plugins/SymbolFile/DWARF/AppleDWARFIndex.cpp
lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp
lldb/source/Plugins/SymbolFile/DWARF/DWARFDeclContext.h
lldb/source/Plugins/SymbolFile/DWARF/DebugNamesDWARFIndex.cpp
lldb/source/Plugins/SymbolFile/DWARF/HashedNameToDIE.cpp
lldb/source/Plugins/SymbolFile/DWARF/ManualDWARFIndex.cpp
lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
Index: lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
===================================================================
--- lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
+++ lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
@@ -2045,64 +2045,61 @@
DIEArray die_offsets;
m_index->GetGlobalVariables(ConstString(basename), die_offsets);
const size_t num_die_matches = die_offsets.size();
- if (num_die_matches) {
- SymbolContext sc;
- sc.module_sp = m_objfile_sp->GetModule();
- assert(sc.module_sp);
- // Loop invariant: Variables up to this index have been checked for context
- // matches.
- uint32_t pruned_idx = original_size;
+ SymbolContext sc;
+ sc.module_sp = m_objfile_sp->GetModule();
+ assert(sc.module_sp);
- bool done = false;
- for (size_t i = 0; i < num_die_matches && !done; ++i) {
- const DIERef &die_ref = die_offsets[i];
- DWARFDIE die = GetDIE(die_ref);
+ // Loop invariant: Variables up to this index have been checked for context
+ // matches.
+ uint32_t pruned_idx = original_size;
- if (die) {
- switch (die.Tag()) {
- default:
- case DW_TAG_subprogram:
- case DW_TAG_inlined_subroutine:
- case DW_TAG_try_block:
- case DW_TAG_catch_block:
- break;
+ for (size_t i = 0; i < num_die_matches; ++i) {
+ const DIERef &die_ref = die_offsets[i];
+ DWARFDIE die = GetDIE(die_ref);
+ if (!die) {
+ m_index->ReportInvalidDIERef(die_ref, name.GetStringRef());
+ continue;
+ }
- case DW_TAG_variable: {
- auto *dwarf_cu = llvm::dyn_cast<DWARFCompileUnit>(die.GetCU());
- if (!dwarf_cu)
- continue;
- sc.comp_unit = GetCompUnitForDWARFCompUnit(*dwarf_cu);
-
- if (parent_decl_ctx) {
- if (DWARFASTParser *dwarf_ast = GetDWARFParser(*die.GetCU())) {
- CompilerDeclContext actual_parent_decl_ctx =
- dwarf_ast->GetDeclContextContainingUIDFromDWARF(die);
- if (!actual_parent_decl_ctx ||
- actual_parent_decl_ctx != parent_decl_ctx)
- continue;
- }
- }
+ switch (die.Tag()) {
+ default:
+ case DW_TAG_subprogram:
+ case DW_TAG_inlined_subroutine:
+ case DW_TAG_try_block:
+ case DW_TAG_catch_block:
+ continue;
- ParseVariables(sc, die, LLDB_INVALID_ADDRESS, false, false,
- &variables);
- while (pruned_idx < variables.GetSize()) {
- VariableSP var_sp = variables.GetVariableAtIndex(pruned_idx);
- if (name_is_mangled ||
- var_sp->GetName().GetStringRef().contains(name.GetStringRef()))
- ++pruned_idx;
- else
- variables.RemoveVariableAtIndex(pruned_idx);
- }
+ case DW_TAG_variable:
+ break;
+ }
+ auto *dwarf_cu = llvm::dyn_cast<DWARFCompileUnit>(die.GetCU());
+ if (!dwarf_cu)
+ continue;
+ sc.comp_unit = GetCompUnitForDWARFCompUnit(*dwarf_cu);
- if (variables.GetSize() - original_size >= max_matches)
- done = true;
- } break;
- }
- } else {
- m_index->ReportInvalidDIERef(die_ref, name.GetStringRef());
+ if (parent_decl_ctx) {
+ if (DWARFASTParser *dwarf_ast = GetDWARFParser(*die.GetCU())) {
+ CompilerDeclContext actual_parent_decl_ctx =
+ dwarf_ast->GetDeclContextContainingUIDFromDWARF(die);
+ if (!actual_parent_decl_ctx ||
+ actual_parent_decl_ctx != parent_decl_ctx)
+ continue;
}
}
+
+ ParseVariables(sc, die, LLDB_INVALID_ADDRESS, false, false, &variables);
+ while (pruned_idx < variables.GetSize()) {
+ VariableSP var_sp = variables.GetVariableAtIndex(pruned_idx);
+ if (name_is_mangled ||
+ var_sp->GetName().GetStringRef().contains(name.GetStringRef()))
+ ++pruned_idx;
+ else
+ variables.RemoveVariableAtIndex(pruned_idx);
+ }
+
+ if (variables.GetSize() - original_size >= max_matches)
+ break;
}
// Return the number of variable that were appended to the list
@@ -2142,25 +2139,23 @@
assert(sc.module_sp);
const size_t num_matches = die_offsets.size();
- if (num_matches) {
- for (size_t i = 0; i < num_matches; ++i) {
- const DIERef &die_ref = die_offsets[i];
- DWARFDIE die = GetDIE(die_ref);
+ for (size_t i = 0; i < num_matches; ++i) {
+ const DIERef &die_ref = die_offsets[i];
+ DWARFDIE die = GetDIE(die_ref);
+ if (!die) {
+ m_index->ReportInvalidDIERef(die_ref, regex.GetText());
+ continue;
+ }
- if (die) {
- DWARFCompileUnit *dwarf_cu =
- llvm::dyn_cast<DWARFCompileUnit>(die.GetCU());
- if (!dwarf_cu)
- continue;
- sc.comp_unit = GetCompUnitForDWARFCompUnit(*dwarf_cu);
+ DWARFCompileUnit *dwarf_cu = llvm::dyn_cast<DWARFCompileUnit>(die.GetCU());
+ if (!dwarf_cu)
+ continue;
+ sc.comp_unit = GetCompUnitForDWARFCompUnit(*dwarf_cu);
- ParseVariables(sc, die, LLDB_INVALID_ADDRESS, false, false, &variables);
+ ParseVariables(sc, die, LLDB_INVALID_ADDRESS, false, false, &variables);
- if (variables.GetSize() - original_size >= max_matches)
- break;
- } else
- m_index->ReportInvalidDIERef(die_ref, regex.GetText());
- }
+ if (variables.GetSize() - original_size >= max_matches)
+ break;
}
}
@@ -2274,7 +2269,6 @@
const uint32_t original_size = sc_list.GetSize();
llvm::DenseSet<const DWARFDebugInfoEntry *> resolved_dies;
- DIEArray offsets;
std::vector<DWARFDIE> dies;
m_index->GetFunctions(name, *this, parent_decl_ctx, name_type_mask, dies);
@@ -2388,21 +2382,23 @@
for (size_t i = 0; i < num_die_matches; ++i) {
const DIERef &die_ref = die_offsets[i];
DWARFDIE die = GetDIE(die_ref);
- if (die) {
- if (!DIEInDeclContext(parent_decl_ctx, die))
- continue; // The containing decl contexts don't match
-
- Type *matching_type = ResolveType(die, true, true);
- if (matching_type) {
- // We found a type pointer, now find the shared pointer form our type
- // list
- types.InsertUnique(matching_type->shared_from_this());
- if (types.GetSize() >= max_matches)
- break;
- }
- } else {
+ if (!die) {
m_index->ReportInvalidDIERef(die_ref, name.GetStringRef());
+ continue;
}
+
+ if (!DIEInDeclContext(parent_decl_ctx, die))
+ continue; // The containing decl contexts don't match
+
+ Type *matching_type = ResolveType(die, true, true);
+ if (!matching_type)
+ continue;
+
+ // We found a type pointer, now find the shared pointer form our type
+ // list
+ types.InsertUnique(matching_type->shared_from_this());
+ if (types.GetSize() >= max_matches)
+ break;
}
// Next search through the reachable Clang modules. This only applies for
@@ -2460,11 +2456,11 @@
for (size_t i = 0; i < num_die_matches; ++i) {
const DIERef &die_ref = die_offsets[i];
DWARFDIE die = GetDIE(die_ref);
-
if (!die) {
m_index->ReportInvalidDIERef(die_ref, name.GetStringRef());
continue;
}
+
if (!languages[GetLanguage(*die.GetCU())])
continue;
@@ -2511,24 +2507,24 @@
DIEArray die_offsets;
m_index->GetNamespaces(name, die_offsets);
const size_t num_matches = die_offsets.size();
- if (num_matches) {
- for (size_t i = 0; i < num_matches; ++i) {
- const DIERef &die_ref = die_offsets[i];
- DWARFDIE die = GetDIE(die_ref);
+ for (size_t i = 0; i < num_matches; ++i) {
+ const DIERef &die_ref = die_offsets[i];
+ DWARFDIE die = GetDIE(die_ref);
+ if (!die) {
+ m_index->ReportInvalidDIERef(die_ref, name.GetStringRef());
+ continue;
+ }
- if (die) {
- if (!DIEInDeclContext(parent_decl_ctx, die))
- continue; // The containing decl contexts don't match
+ if (!DIEInDeclContext(parent_decl_ctx, die))
+ continue; // The containing decl contexts don't match
- if (DWARFASTParser *dwarf_ast = GetDWARFParser(*die.GetCU())) {
- namespace_decl_ctx = dwarf_ast->GetDeclContextForUIDFromDWARF(die);
- if (namespace_decl_ctx)
- break;
- }
- } else {
- m_index->ReportInvalidDIERef(die_ref, name.GetStringRef());
- }
- }
+ DWARFASTParser *dwarf_ast = GetDWARFParser(*die.GetCU());
+ if (!dwarf_ast)
+ continue;
+
+ namespace_decl_ctx = dwarf_ast->GetDeclContextForUIDFromDWARF(die);
+ if (namespace_decl_ctx)
+ break;
}
if (log && namespace_decl_ctx) {
GetObjectFile()->GetModule()->LogMessage(
@@ -2688,54 +2684,53 @@
const size_t num_matches = die_offsets.size();
- if (num_matches) {
- for (size_t i = 0; i < num_matches; ++i) {
- const DIERef &die_ref = die_offsets[i];
- DWARFDIE type_die = GetDIE(die_ref);
-
- if (type_die) {
- bool try_resolving_type = false;
+ for (size_t i = 0; i < num_matches; ++i) {
+ const DIERef &die_ref = die_offsets[i];
+ DWARFDIE type_die = GetDIE(die_ref);
+ if (!type_die) {
+ m_index->ReportInvalidDIERef(die_ref, type_name.GetStringRef());
+ continue;
+ }
- // Don't try and resolve the DIE we are looking for with the DIE
- // itself!
- if (type_die != die) {
- switch (type_die.Tag()) {
- case DW_TAG_class_type:
- case DW_TAG_structure_type:
- try_resolving_type = true;
- break;
- default:
- break;
- }
- }
+ bool try_resolving_type = false;
- if (try_resolving_type) {
- if (must_be_implementation &&
- type_die.Supports_DW_AT_APPLE_objc_complete_type())
- try_resolving_type = type_die.GetAttributeValueAsUnsigned(
- DW_AT_APPLE_objc_complete_type, 0);
-
- if (try_resolving_type) {
- Type *resolved_type = ResolveType(type_die, false, true);
- if (resolved_type && resolved_type != DIE_IS_BEING_PARSED) {
- DEBUG_PRINTF("resolved 0x%8.8" PRIx64 " from %s to 0x%8.8" PRIx64
- " (cu 0x%8.8" PRIx64 ")\n",
- die.GetID(),
- m_objfile_sp->GetFileSpec().GetFilename().AsCString(
- "<Unknown>"),
- type_die.GetID(), type_cu->GetID());
-
- if (die)
- GetDIEToType()[die.GetDIE()] = resolved_type;
- type_sp = resolved_type->shared_from_this();
- break;
- }
- }
- }
- } else {
- m_index->ReportInvalidDIERef(die_ref, type_name.GetStringRef());
+ // Don't try and resolve the DIE we are looking for with the DIE
+ // itself!
+ if (type_die != die) {
+ switch (type_die.Tag()) {
+ case DW_TAG_class_type:
+ case DW_TAG_structure_type:
+ try_resolving_type = true;
+ break;
+ default:
+ break;
}
}
+ if (!try_resolving_type)
+ continue;
+
+ if (must_be_implementation &&
+ type_die.Supports_DW_AT_APPLE_objc_complete_type())
+ try_resolving_type = type_die.GetAttributeValueAsUnsigned(
+ DW_AT_APPLE_objc_complete_type, 0);
+ if (!try_resolving_type)
+ continue;
+
+ Type *resolved_type = ResolveType(type_die, false, true);
+ if (!resolved_type || resolved_type == DIE_IS_BEING_PARSED)
+ continue;
+
+ DEBUG_PRINTF(
+ "resolved 0x%8.8" PRIx64 " from %s to 0x%8.8" PRIx64
+ " (cu 0x%8.8" PRIx64 ")\n",
+ die.GetID(),
+ m_objfile_sp->GetFileSpec().GetFilename().AsCString("<Unknown>"),
+ type_die.GetID(), type_cu->GetID());
+
+ if (die)
+ GetDIEToType()[die.GetDIE()] = resolved_type;
+ type_sp = resolved_type->shared_from_this();
+ break;
}
return type_sp;
}
@@ -2870,90 +2865,90 @@
type_system = &type_system_or_err.get();
}
}
- if (num_matches) {
- for (size_t i = 0; i < num_matches; ++i) {
- const DIERef &die_ref = die_offsets[i];
- DWARFDIE type_die = GetDIE(die_ref);
-
- if (type_die) {
- // Make sure type_die's langauge matches the type system we are
- // looking for. We don't want to find a "Foo" type from Java if we
- // are looking for a "Foo" type for C, C++, ObjC, or ObjC++.
- if (type_system &&
- !type_system->SupportsLanguage(GetLanguage(*type_die.GetCU())))
- continue;
- bool try_resolving_type = false;
-
- // Don't try and resolve the DIE we are looking for with the DIE
- // itself!
- const dw_tag_t type_tag = type_die.Tag();
- // Make sure the tags match
- if (type_tag == tag) {
- // The tags match, lets try resolving this type
- try_resolving_type = true;
- } else {
- // The tags don't match, but we need to watch our for a forward
- // declaration for a struct and ("struct foo") ends up being a
- // class ("class foo { ... };") or vice versa.
- switch (type_tag) {
- case DW_TAG_class_type:
- // We had a "class foo", see if we ended up with a "struct foo
- // { ... };"
- try_resolving_type = (tag == DW_TAG_structure_type);
- break;
- case DW_TAG_structure_type:
- // We had a "struct foo", see if we ended up with a "class foo
- // { ... };"
- try_resolving_type = (tag == DW_TAG_class_type);
- break;
- default:
- // Tags don't match, don't event try to resolve using this type
- // whose name matches....
- break;
- }
- }
+ for (size_t i = 0; i < num_matches; ++i) {
+ const DIERef &die_ref = die_offsets[i];
+ DWARFDIE type_die = GetDIE(die_ref);
+ if (!type_die) {
+ m_index->ReportInvalidDIERef(die_ref, type_name.GetStringRef());
+ continue;
+ }
- if (try_resolving_type) {
- DWARFDeclContext type_dwarf_decl_ctx =
- GetDWARFDeclContext(type_die);
-
- if (log) {
- GetObjectFile()->GetModule()->LogMessage(
- log,
- "SymbolFileDWARF::"
- "FindDefinitionTypeForDWARFDeclContext(tag=%s, "
- "qualified-name='%s') trying die=0x%8.8x (%s)",
- DW_TAG_value_to_name(dwarf_decl_ctx[0].tag),
- dwarf_decl_ctx.GetQualifiedName(), type_die.GetOffset(),
- type_dwarf_decl_ctx.GetQualifiedName());
- }
+ // Make sure type_die's langauge matches the type system we are
+ // looking for. We don't want to find a "Foo" type from Java if we
+ // are looking for a "Foo" type for C, C++, ObjC, or ObjC++.
+ if (type_system &&
+ !type_system->SupportsLanguage(GetLanguage(*type_die.GetCU())))
+ continue;
+ bool try_resolving_type = false;
- // Make sure the decl contexts match all the way up
- if (dwarf_decl_ctx == type_dwarf_decl_ctx) {
- Type *resolved_type = ResolveType(type_die, false);
- if (resolved_type && resolved_type != DIE_IS_BEING_PARSED) {
- type_sp = resolved_type->shared_from_this();
- break;
- }
- }
- } else {
- if (log) {
- std::string qualified_name;
- type_die.GetQualifiedName(qualified_name);
- GetObjectFile()->GetModule()->LogMessage(
- log,
- "SymbolFileDWARF::"
- "FindDefinitionTypeForDWARFDeclContext(tag=%s, "
- "qualified-name='%s') ignoring die=0x%8.8x (%s)",
- DW_TAG_value_to_name(dwarf_decl_ctx[0].tag),
- dwarf_decl_ctx.GetQualifiedName(), type_die.GetOffset(),
- qualified_name.c_str());
- }
- }
- } else {
- m_index->ReportInvalidDIERef(die_ref, type_name.GetStringRef());
+ // Don't try and resolve the DIE we are looking for with the DIE
+ // itself!
+ const dw_tag_t type_tag = type_die.Tag();
+ // Make sure the tags match
+ if (type_tag == tag) {
+ // The tags match, lets try resolving this type
+ try_resolving_type = true;
+ } else {
+ // The tags don't match, but we need to watch our for a forward
+ // declaration for a struct and ("struct foo") ends up being a
+ // class ("class foo { ... };") or vice versa.
+ switch (type_tag) {
+ case DW_TAG_class_type:
+ // We had a "class foo", see if we ended up with a "struct foo
+ // { ... };"
+ try_resolving_type = (tag == DW_TAG_structure_type);
+ break;
+ case DW_TAG_structure_type:
+ // We had a "struct foo", see if we ended up with a "class foo
+ // { ... };"
+ try_resolving_type = (tag == DW_TAG_class_type);
+ break;
+ default:
+ // Tags don't match, don't event try to resolve using this type
+ // whose name matches....
+ break;
}
}
+
+ if (!try_resolving_type) {
+ if (!log)
+ continue;
+ std::string qualified_name;
+ type_die.GetQualifiedName(qualified_name);
+ GetObjectFile()->GetModule()->LogMessage(
+ log,
+ "SymbolFileDWARF::"
+ "FindDefinitionTypeForDWARFDeclContext(tag=%s, "
+ "qualified-name='%s') ignoring die=0x%8.8x (%s)",
+ DW_TAG_value_to_name(dwarf_decl_ctx[0].tag),
+ dwarf_decl_ctx.GetQualifiedName(), type_die.GetOffset(),
+ qualified_name.c_str());
+ continue;
+ }
+
+ DWARFDeclContext type_dwarf_decl_ctx = GetDWARFDeclContext(type_die);
+
+ if (log) {
+ GetObjectFile()->GetModule()->LogMessage(
+ log,
+ "SymbolFileDWARF::"
+ "FindDefinitionTypeForDWARFDeclContext(tag=%s, "
+ "qualified-name='%s') trying die=0x%8.8x (%s)",
+ DW_TAG_value_to_name(dwarf_decl_ctx[0].tag),
+ dwarf_decl_ctx.GetQualifiedName(), type_die.GetOffset(),
+ type_dwarf_decl_ctx.GetQualifiedName());
+ }
+
+ // Make sure the decl contexts match all the way up
+ if (dwarf_decl_ctx != type_dwarf_decl_ctx)
+ continue;
+
+ Type *resolved_type = ResolveType(type_die, false);
+ if (!resolved_type || resolved_type == DIE_IS_BEING_PARSED)
+ continue;
+
+ type_sp = resolved_type->shared_from_this();
+ break;
}
}
}
@@ -3102,19 +3097,18 @@
m_index->GetGlobalVariables(dwarf_cu->GetNonSkeletonUnit(),
die_offsets);
const size_t num_matches = die_offsets.size();
- if (num_matches) {
- for (size_t i = 0; i < num_matches; ++i) {
- const DIERef &die_ref = die_offsets[i];
- DWARFDIE die = GetDIE(die_ref);
- if (die) {
- VariableSP var_sp(
- ParseVariableDIE(sc, die, LLDB_INVALID_ADDRESS));
- if (var_sp) {
- variables->AddVariableIfUnique(var_sp);
- ++vars_added;
- }
- } else
- m_index->ReportInvalidDIERef(die_ref, "");
+ for (size_t i = 0; i < num_matches; ++i) {
+ const DIERef &die_ref = die_offsets[i];
+ DWARFDIE die = GetDIE(die_ref);
+ if (!die) {
+ m_index->ReportInvalidDIERef(die_ref, "");
+ continue;
+ }
+
+ VariableSP var_sp(ParseVariableDIE(sc, die, LLDB_INVALID_ADDRESS));
+ if (var_sp) {
+ variables->AddVariableIfUnique(var_sp);
+ ++vars_added;
}
}
}
Index: lldb/source/Plugins/SymbolFile/DWARF/ManualDWARFIndex.cpp
===================================================================
--- lldb/source/Plugins/SymbolFile/DWARF/ManualDWARFIndex.cpp
+++ lldb/source/Plugins/SymbolFile/DWARF/ManualDWARFIndex.cpp
@@ -426,8 +426,9 @@
DWARFDIE die = dwarf.GetDIE(die_ref);
if (!die)
continue;
- if (SymbolFileDWARF::DIEInDeclContext(parent_decl_ctx, die))
- dies.push_back(die);
+ if (!SymbolFileDWARF::DIEInDeclContext(parent_decl_ctx, die))
+ continue;
+ dies.push_back(die);
}
}
if (name_type_mask & eFunctionNameTypeBase) {
@@ -437,18 +438,20 @@
DWARFDIE die = dwarf.GetDIE(die_ref);
if (!die)
continue;
- if (SymbolFileDWARF::DIEInDeclContext(parent_decl_ctx, die))
- dies.push_back(die);
+ if (!SymbolFileDWARF::DIEInDeclContext(parent_decl_ctx, die))
+ continue;
+ dies.push_back(die);
}
- offsets.clear();
}
if (name_type_mask & eFunctionNameTypeMethod && !parent_decl_ctx.IsValid()) {
DIEArray offsets;
m_set.function_methods.Find(name, offsets);
for (const DIERef &die_ref: offsets) {
- if (DWARFDIE die = dwarf.GetDIE(die_ref))
- dies.push_back(die);
+ DWARFDIE die = dwarf.GetDIE(die_ref);
+ if (!die)
+ continue;
+ dies.push_back(die);
}
}
@@ -457,8 +460,10 @@
DIEArray offsets;
m_set.function_selectors.Find(name, offsets);
for (const DIERef &die_ref: offsets) {
- if (DWARFDIE die = dwarf.GetDIE(die_ref))
- dies.push_back(die);
+ DWARFDIE die = dwarf.GetDIE(die_ref);
+ if (!die)
+ continue;
+ dies.push_back(die);
}
}
}
Index: lldb/source/Plugins/SymbolFile/DWARF/HashedNameToDIE.cpp
===================================================================
--- lldb/source/Plugins/SymbolFile/DWARF/HashedNameToDIE.cpp
+++ lldb/source/Plugins/SymbolFile/DWARF/HashedNameToDIE.cpp
@@ -21,19 +21,19 @@
DIEArray &die_offsets) {
if (tag == 0) {
ExtractDIEArray(die_info_array, die_offsets);
- } else {
- const size_t count = die_info_array.size();
- for (size_t i = 0; i < count; ++i) {
- const dw_tag_t die_tag = die_info_array[i].tag;
- bool tag_matches = die_tag == 0 || tag == die_tag;
- if (!tag_matches) {
- if (die_tag == DW_TAG_class_type || die_tag == DW_TAG_structure_type)
- tag_matches =
- tag == DW_TAG_structure_type || tag == DW_TAG_class_type;
- }
- if (tag_matches)
- die_offsets.emplace_back(die_info_array[i]);
+ return;
+ }
+
+ const size_t count = die_info_array.size();
+ for (size_t i = 0; i < count; ++i) {
+ const dw_tag_t die_tag = die_info_array[i].tag;
+ bool tag_matches = die_tag == 0 || tag == die_tag;
+ if (!tag_matches) {
+ if (die_tag == DW_TAG_class_type || die_tag == DW_TAG_structure_type)
+ tag_matches = tag == DW_TAG_structure_type || tag == DW_TAG_class_type;
}
+ if (tag_matches)
+ die_offsets.emplace_back(die_info_array[i]);
}
}
@@ -43,21 +43,21 @@
DIEArray &die_offsets) {
if (tag == 0) {
ExtractDIEArray(die_info_array, die_offsets);
- } else {
- const size_t count = die_info_array.size();
- for (size_t i = 0; i < count; ++i) {
- if (qualified_name_hash != die_info_array[i].qualified_name_hash)
- continue;
- const dw_tag_t die_tag = die_info_array[i].tag;
- bool tag_matches = die_tag == 0 || tag == die_tag;
- if (!tag_matches) {
- if (die_tag == DW_TAG_class_type || die_tag == DW_TAG_structure_type)
- tag_matches =
- tag == DW_TAG_structure_type || tag == DW_TAG_class_type;
- }
- if (tag_matches)
- die_offsets.emplace_back(die_info_array[i]);
+ return;
+ }
+
+ const size_t count = die_info_array.size();
+ for (size_t i = 0; i < count; ++i) {
+ if (qualified_name_hash != die_info_array[i].qualified_name_hash)
+ continue;
+ const dw_tag_t die_tag = die_info_array[i].tag;
+ bool tag_matches = die_tag == 0 || tag == die_tag;
+ if (!tag_matches) {
+ if (die_tag == DW_TAG_class_type || die_tag == DW_TAG_structure_type)
+ tag_matches = tag == DW_TAG_structure_type || tag == DW_TAG_class_type;
}
+ if (tag_matches)
+ die_offsets.emplace_back(die_info_array[i]);
}
}
@@ -67,22 +67,22 @@
const size_t count = die_info_array.size();
for (size_t i = 0; i < count; ++i) {
const dw_tag_t die_tag = die_info_array[i].tag;
- if (die_tag == 0 || die_tag == DW_TAG_class_type ||
- die_tag == DW_TAG_structure_type) {
- if (die_info_array[i].type_flags & eTypeFlagClassIsImplementation) {
- if (return_implementation_only_if_available) {
- // We found the one true definition for this class, so only return
- // that
- die_offsets.clear();
- die_offsets.emplace_back(die_info_array[i]);
- return;
- } else {
- // Put the one true definition as the first entry so it matches first
- die_offsets.emplace(die_offsets.begin(), die_info_array[i]);
- }
- } else {
+ if (die_tag != 0 && die_tag != DW_TAG_class_type &&
+ die_tag != DW_TAG_structure_type)
+ continue;
+ if (die_info_array[i].type_flags & eTypeFlagClassIsImplementation) {
+ if (return_implementation_only_if_available) {
+ // We found the one true definition for this class, so only return
+ // that
+ die_offsets.clear();
die_offsets.emplace_back(die_info_array[i]);
+ return;
+ } else {
+ // Put the one true definition as the first entry so it matches first
+ die_offsets.emplace(die_offsets.begin(), die_info_array[i]);
}
+ } else {
+ die_offsets.emplace_back(die_info_array[i]);
}
}
}
@@ -521,8 +521,8 @@
return 0;
DIEInfoArray die_info_array;
- if (FindByName(name, die_info_array))
- DWARFMappedHash::ExtractDIEArray(die_info_array, die_offsets);
+ FindByName(name, die_info_array);
+ DWARFMappedHash::ExtractDIEArray(die_info_array, die_offsets);
return die_info_array.size();
}
@@ -530,8 +530,8 @@
const dw_tag_t tag,
DIEArray &die_offsets) {
DIEInfoArray die_info_array;
- if (FindByName(name, die_info_array))
- DWARFMappedHash::ExtractDIEArray(die_info_array, tag, die_offsets);
+ FindByName(name, die_info_array);
+ DWARFMappedHash::ExtractDIEArray(die_info_array, tag, die_offsets);
return die_info_array.size();
}
@@ -539,33 +539,32 @@
llvm::StringRef name, const dw_tag_t tag,
const uint32_t qualified_name_hash, DIEArray &die_offsets) {
DIEInfoArray die_info_array;
- if (FindByName(name, die_info_array))
- DWARFMappedHash::ExtractDIEArray(die_info_array, tag, qualified_name_hash,
- die_offsets);
+ FindByName(name, die_info_array);
+ DWARFMappedHash::ExtractDIEArray(die_info_array, tag, qualified_name_hash,
+ die_offsets);
return die_info_array.size();
}
size_t DWARFMappedHash::MemoryTable::FindCompleteObjCClassByName(
llvm::StringRef name, DIEArray &die_offsets, bool must_be_implementation) {
DIEInfoArray die_info_array;
- if (FindByName(name, die_info_array)) {
- if (must_be_implementation &&
- GetHeader().header_data.ContainsAtom(eAtomTypeTypeFlags)) {
- // If we have two atoms, then we have the DIE offset and the type flags
- // so we can find the objective C class efficiently.
- DWARFMappedHash::ExtractTypesFromDIEArray(die_info_array, UINT32_MAX,
- eTypeFlagClassIsImplementation,
- die_offsets);
- } else {
- // We don't only want the one true definition, so try and see what we can
- // find, and only return class or struct DIEs. If we do have the full
- // implementation, then return it alone, else return all possible
- // matches.
- const bool return_implementation_only_if_available = true;
- DWARFMappedHash::ExtractClassOrStructDIEArray(
- die_info_array, return_implementation_only_if_available, die_offsets);
- }
+ FindByName(name, die_info_array);
+ if (must_be_implementation &&
+ GetHeader().header_data.ContainsAtom(eAtomTypeTypeFlags)) {
+ // If we have two atoms, then we have the DIE offset and the type flags
+ // so we can find the objective C class efficiently.
+ DWARFMappedHash::ExtractTypesFromDIEArray(die_info_array, UINT32_MAX,
+ eTypeFlagClassIsImplementation,
+ die_offsets);
+ return die_offsets.size();
}
+ // We don't only want the one true definition, so try and see what we can
+ // find, and only return class or struct DIEs. If we do have the full
+ // implementation, then return it alone, else return all possible
+ // matches.
+ const bool return_implementation_only_if_available = true;
+ DWARFMappedHash::ExtractClassOrStructDIEArray(
+ die_info_array, return_implementation_only_if_available, die_offsets);
return die_offsets.size();
}
Index: lldb/source/Plugins/SymbolFile/DWARF/DebugNamesDWARFIndex.cpp
===================================================================
--- lldb/source/Plugins/SymbolFile/DWARF/DebugNamesDWARFIndex.cpp
+++ lldb/source/Plugins/SymbolFile/DWARF/DebugNamesDWARFIndex.cpp
@@ -165,9 +165,8 @@
// If we find the complete version we're done.
offsets.push_back(*ref);
return;
- } else {
- incomplete_types.push_back(*ref);
}
+ incomplete_types.push_back(*ref);
}
offsets.insert(offsets.end(), incomplete_types.begin(),
Index: lldb/source/Plugins/SymbolFile/DWARF/DWARFDeclContext.h
===================================================================
--- lldb/source/Plugins/SymbolFile/DWARF/DWARFDeclContext.h
+++ lldb/source/Plugins/SymbolFile/DWARF/DWARFDeclContext.h
@@ -48,6 +48,7 @@
}
bool operator==(const DWARFDeclContext &rhs) const;
+ bool operator!=(const DWARFDeclContext &rhs) const { return !(*this == rhs); }
uint32_t GetSize() const { return m_entries.size(); }
Index: lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp
===================================================================
--- lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp
+++ lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp
@@ -2011,17 +2011,15 @@
DIEArray method_die_offsets;
dwarf->GetObjCMethodDIEOffsets(class_name, method_die_offsets);
- if (!method_die_offsets.empty()) {
- DWARFDebugInfo &debug_info = dwarf->DebugInfo();
+ DWARFDebugInfo &debug_info = dwarf->DebugInfo();
- const size_t num_matches = method_die_offsets.size();
- for (size_t i = 0; i < num_matches; ++i) {
- const DIERef &die_ref = method_die_offsets[i];
- DWARFDIE method_die = debug_info.GetDIE(die_ref);
+ const size_t num_matches = method_die_offsets.size();
+ for (size_t i = 0; i < num_matches; ++i) {
+ const DIERef &die_ref = method_die_offsets[i];
+ DWARFDIE method_die = debug_info.GetDIE(die_ref);
- if (method_die)
- method_die.ResolveType();
- }
+ if (method_die)
+ method_die.ResolveType();
}
for (DelayedPropertyList::iterator pi = delayed_properties.begin(),
Index: lldb/source/Plugins/SymbolFile/DWARF/AppleDWARFIndex.cpp
===================================================================
--- lldb/source/Plugins/SymbolFile/DWARF/AppleDWARFIndex.cpp
+++ lldb/source/Plugins/SymbolFile/DWARF/AppleDWARFIndex.cpp
@@ -53,8 +53,9 @@
}
void AppleDWARFIndex::GetGlobalVariables(ConstString basename, DIEArray &offsets) {
- if (m_apple_names_up)
- m_apple_names_up->FindByName(basename.GetStringRef(), offsets);
+ if (!m_apple_names_up)
+ return;
+ m_apple_names_up->FindByName(basename.GetStringRef(), offsets);
}
void AppleDWARFIndex::GetGlobalVariables(const RegularExpression ®ex,
@@ -80,22 +81,24 @@
void AppleDWARFIndex::GetObjCMethods(ConstString class_name,
DIEArray &offsets) {
- if (m_apple_objc_up)
- m_apple_objc_up->FindByName(class_name.GetStringRef(), offsets);
+ if (!m_apple_objc_up)
+ return;
+ m_apple_objc_up->FindByName(class_name.GetStringRef(), offsets);
}
void AppleDWARFIndex::GetCompleteObjCClass(ConstString class_name,
bool must_be_implementation,
DIEArray &offsets) {
- if (m_apple_types_up) {
- m_apple_types_up->FindCompleteObjCClassByName(
- class_name.GetStringRef(), offsets, must_be_implementation);
- }
+ if (!m_apple_types_up)
+ return;
+ m_apple_types_up->FindCompleteObjCClassByName(
+ class_name.GetStringRef(), offsets, must_be_implementation);
}
void AppleDWARFIndex::GetTypes(ConstString name, DIEArray &offsets) {
- if (m_apple_types_up)
- m_apple_types_up->FindByName(name.GetStringRef(), offsets);
+ if (!m_apple_types_up)
+ return;
+ m_apple_types_up->FindByName(name.GetStringRef(), offsets);
}
void AppleDWARFIndex::GetTypes(const DWARFDeclContext &context,
@@ -149,8 +152,9 @@
}
void AppleDWARFIndex::GetNamespaces(ConstString name, DIEArray &offsets) {
- if (m_apple_namespaces_up)
- m_apple_namespaces_up->FindByName(name.GetStringRef(), offsets);
+ if (!m_apple_namespaces_up)
+ return;
+ m_apple_namespaces_up->FindByName(name.GetStringRef(), offsets);
}
void AppleDWARFIndex::GetFunctions(ConstString name, SymbolFileDWARF &dwarf,
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits