about summary refs log tree commit diff
diff options
context:
space:
mode:
authorortem <ortem00@gmail.com>2020-11-20 18:01:15 +0300
committerortem <ortem00@gmail.com>2020-11-23 17:07:14 +0300
commit685e1f3e45ef1ffa881be13b6af1867209c294c7 (patch)
tree86dc51c1922230917cd784bd94d1f2b32654bcc7
parent068320b39e3e4839d832b3aa71fa910ba170673b (diff)
downloadrust-685e1f3e45ef1ffa881be13b6af1867209c294c7.tar.gz
rust-685e1f3e45ef1ffa881be13b6af1867209c294c7.zip
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
-rw-r--r--src/etc/gdb_providers.py9
1 files changed, 5 insertions, 4 deletions
diff --git a/src/etc/gdb_providers.py b/src/etc/gdb_providers.py
index b5ade324bba..d9e08eb581d 100644
--- a/src/etc/gdb_providers.py
+++ b/src/etc/gdb_providers.py
@@ -1,7 +1,6 @@
 from sys import version_info
 
 import gdb
-from gdb import lookup_type
 
 if version_info[0] >= 3:
     xrange = range
@@ -213,7 +212,7 @@ def children_of_btree_map(map):
     def children_of_node(node_ptr, height):
         def cast_to_internal(node):
             internal_type_name = node.type.target().name.replace("LeafNode", "InternalNode", 1)
-            internal_type = lookup_type(internal_type_name)
+            internal_type = gdb.lookup_type(internal_type_name)
             return node.cast(internal_type.pointer())
 
         leaf = node_ptr.dereference()
@@ -230,8 +229,10 @@ def children_of_btree_map(map):
                     yield child
             if i < length:
                 # Avoid "Cannot perform pointer math on incomplete type" on zero-sized arrays.
-                key = keys[i]["value"]["value"] if keys.type.sizeof > 0 else "()"
-                val = vals[i]["value"]["value"] if vals.type.sizeof > 0 else "()"
+                key_type_size = keys.type.sizeof
+                val_type_size = vals.type.sizeof
+                key = keys[i]["value"]["value"] if key_type_size > 0 else gdb.parse_and_eval("()")
+                val = vals[i]["value"]["value"] if val_type_size > 0 else gdb.parse_and_eval("()")
                 yield key, val
 
     if map["length"] > 0: