[llvm] [llvm][utils] Add synthetic provider for llvm::DenseSet (PR #143631)
Dave Lee via llvm-commits
llvm-commits at lists.llvm.org
Tue Jun 10 16:37:53 PDT 2025
https://github.com/kastiglione created https://github.com/llvm/llvm-project/pull/143631
None
>From 2df86c40be6303a109f5ac44d330c85e22efeba6 Mon Sep 17 00:00:00 2001
From: Dave Lee <davelee.com at gmail.com>
Date: Tue, 10 Jun 2025 16:36:49 -0700
Subject: [PATCH] [llvm][utils] Add synthetic provider for llvm::DenseSet
---
llvm/utils/lldbDataFormatters.py | 29 ++++++++++++++++++++++++++++-
1 file changed, 28 insertions(+), 1 deletion(-)
diff --git a/llvm/utils/lldbDataFormatters.py b/llvm/utils/lldbDataFormatters.py
index 988827ab4aa50..c5cd627c53149 100644
--- a/llvm/utils/lldbDataFormatters.py
+++ b/llvm/utils/lldbDataFormatters.py
@@ -3,6 +3,7 @@
Load into LLDB with 'command script import /path/to/lldbDataFormatters.py'
"""
+
from __future__ import annotations
import collections
@@ -82,6 +83,11 @@ def __lldb_init_module(debugger, internal_dict):
f"-l {__name__}.DenseMapSynthetic "
'-x "^llvm::DenseMap<.+>$"'
)
+ debugger.HandleCommand(
+ "type synthetic add -w llvm "
+ f"-l {__name__}.DenseSetSynthetic "
+ '-x "^llvm::DenseSet<.+>$"'
+ )
debugger.HandleCommand(
"type synthetic add -w llvm "
@@ -372,7 +378,8 @@ def update(self):
# For each key, collect a list of buckets it appears in.
key_buckets: dict[str, list[int]] = collections.defaultdict(list)
for index in range(num_buckets):
- key = buckets.GetValueForExpressionPath(f"[{index}].first")
+ bucket = buckets.GetValueForExpressionPath(f"[{index}]")
+ key = bucket.GetChildAtIndex(0)
key_buckets[str(key.data)].append(index)
# Heuristic: This is not a multi-map, any repeated (non-unique) keys are
@@ -383,6 +390,26 @@ def update(self):
self.child_buckets.append(indexes[0])
+class DenseSetSynthetic:
+ valobj: lldb.SBValue
+ map: lldb.SBValue
+
+ def __init__(self, valobj: lldb.SBValue, _) -> None:
+ self.valobj = valobj
+
+ def num_children(self) -> int:
+ return self.map.num_children
+
+ def get_child_at_index(self, idx: int) -> lldb.SBValue:
+ map_entry = self.map.child[idx]
+ set_entry = map_entry.GetChildAtIndex(0)
+ return set_entry.Clone(f"[{idx}]")
+
+ def update(self):
+ raw_map = self.valobj.GetChildMemberWithName("TheMap")
+ self.map = raw_map.GetSyntheticValue()
+
+
class ExpectedSynthetic:
# The llvm::Expected<T> value.
expected: lldb.SBValue
More information about the llvm-commits
mailing list