[PATCH] Print type name when printing Rust slice
Tom Tromey
tromey@adacore.com
Mon Mar 11 15:14:51 GMT 2024
The recent change to how unsized Rust values are printed included a
small regression from past behavior. Previously, a slice's type would
be printed, like:
(gdb) print slice
$80 = &[i32] [3]
The patch changed this to just
(gdb) print slice
$80 = [3]
This patch restores the previous behavior.
---
gdb/rust-lang.c | 11 +++++++++++
gdb/testsuite/gdb.rust/simple.exp | 2 +-
gdb/testsuite/gdb.rust/unsized.exp | 2 +-
3 files changed, 13 insertions(+), 2 deletions(-)
diff --git a/gdb/rust-lang.c b/gdb/rust-lang.c
index ab537cc9752..d7265f72770 100644
--- a/gdb/rust-lang.c
+++ b/gdb/rust-lang.c
@@ -476,6 +476,17 @@ rust_language::val_print_slice
}
}
+ /* Print the slice type here. This was gdb's historical behavior
+ (from before unsized types were generically handled) and helps
+ make it clear that the user is seeing a slice, not an array.
+ Only arrays must be handled as the other cases are handled by
+ value_print_inner. */
+ if (type->code () == TYPE_CODE_ARRAY)
+ {
+ type_print (orig_type, "", stream, -1);
+ gdb_printf (stream, " ");
+ }
+
value_print_inner (val, stream, recurse, options);
}
diff --git a/gdb/testsuite/gdb.rust/simple.exp b/gdb/testsuite/gdb.rust/simple.exp
index 7f5fbad7a3f..1e6fc94400e 100644
--- a/gdb/testsuite/gdb.rust/simple.exp
+++ b/gdb/testsuite/gdb.rust/simple.exp
@@ -317,7 +317,7 @@ proc test_one_slice {svar length base range} {
global hex
# Just accept any array here.
- set result " = \\\[.*\\\]"
+ set result " = &\\\[.*\\\] \\\[.*\\\]"
gdb_test "print $svar" $result
gdb_test "print &${base}\[${range}\]" $result
diff --git a/gdb/testsuite/gdb.rust/unsized.exp b/gdb/testsuite/gdb.rust/unsized.exp
index fab655790e6..ea5f281cb3d 100644
--- a/gdb/testsuite/gdb.rust/unsized.exp
+++ b/gdb/testsuite/gdb.rust/unsized.exp
@@ -33,6 +33,6 @@ if {![runto ${srcfile}:$line]} {
gdb_test "ptype us" " = .*V<\\\[u8\\\]>.*"
if {[rust_at_least 1.61]} {
- gdb_test "print us2" " = \\\[1, 2, 3\\\]"
+ gdb_test "print us2" " = .*u8.* \\\[1, 2, 3\\\]"
gdb_test "ptype us2" "type = .*"
}
--
2.43.0
More information about the Gdb-patches
mailing list