Skip to content

Commit 685e1f3

Browse files
committed
Fix zero-sized BTreeMap gdb pretty-printer
`gdb.parse_and_eval("()")` is needed because GDB treats "()" as a Rust array of two characters, not as a unit
1 parent 068320b commit 685e1f3

File tree

1 file changed

+5
-4
lines changed

1 file changed

+5
-4
lines changed

src/etc/gdb_providers.py

+5-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
from sys import version_info
22

33
import gdb
4-
from gdb import lookup_type
54

65
if version_info[0] >= 3:
76
xrange = range
@@ -213,7 +212,7 @@ def children_of_btree_map(map):
213212
def children_of_node(node_ptr, height):
214213
def cast_to_internal(node):
215214
internal_type_name = node.type.target().name.replace("LeafNode", "InternalNode", 1)
216-
internal_type = lookup_type(internal_type_name)
215+
internal_type = gdb.lookup_type(internal_type_name)
217216
return node.cast(internal_type.pointer())
218217

219218
leaf = node_ptr.dereference()
@@ -230,8 +229,10 @@ def cast_to_internal(node):
230229
yield child
231230
if i < length:
232231
# Avoid "Cannot perform pointer math on incomplete type" on zero-sized arrays.
233-
key = keys[i]["value"]["value"] if keys.type.sizeof > 0 else "()"
234-
val = vals[i]["value"]["value"] if vals.type.sizeof > 0 else "()"
232+
key_type_size = keys.type.sizeof
233+
val_type_size = vals.type.sizeof
234+
key = keys[i]["value"]["value"] if key_type_size > 0 else gdb.parse_and_eval("()")
235+
val = vals[i]["value"]["value"] if val_type_size > 0 else gdb.parse_and_eval("()")
235236
yield key, val
236237

237238
if map["length"] > 0:

0 commit comments

Comments
 (0)