================
@@ -402,6 +420,36 @@ bool DebugNamesDWARFIndex::SameParentChain(
   return true;
 }
 
+bool DebugNamesDWARFIndex::WithinParentChain(
+    llvm::ArrayRef<llvm::StringRef> query_parent_names,
+    llvm::ArrayRef<DebugNames::Entry> parent_chain) const {
+  if (parent_chain.size() < query_parent_names.size())
+    return false;
+
+  size_t query_idx = 0, chain_idx = 0;
+  while (query_idx < query_parent_names.size() &&
+         chain_idx < parent_chain.size()) {
+    if (SameAsEntryATName(query_parent_names[query_idx],
+                          parent_chain[chain_idx])) {
+      ++query_idx;
+      ++chain_idx;
+    } else {
+      // Name does not match, try next parent_chain entry if the current entry
+      // is namespace because the current one can be an inline namespace.
----------------
jeffreytan81 wrote:

Yeah, I would love to but I do not think .debug_names tag has information to 
filter it out. It simply encodes `DW_TAG_namespace` tag:
```
   Name 1748 {
      Hash: 0xB3EF34A4
      String: 0x0000ae01 "inline_ns"
      Entry @ 0xb2d9 {
        Abbrev: 0x5
        Tag: DW_TAG_namespace
        DW_IDX_die_offset: 0x00015df7
        DW_IDX_parent: Entry @ 0xbab8
      }
    }
```
I guess we could try to PeekDieName() to parse this DIE from dwo files to check 
if it is an inline vs non-inline namespace but that is the expensive code path 
this PR wants to avoid.

https://github.com/llvm/llvm-project/pull/108907
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to