From: Tom Tromey Date: Thu, 7 Mar 2024 19:57:07 +0000 (-0700) Subject: Print type name when printing Rust slice X-Git-Tag: gdb-15-branchpoint~517 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=251cedaeb57fe1e0fd28798f476fbee75373bbf4;p=thirdparty%2Fbinutils-gdb.git Print type name when printing Rust slice 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. Reviewed-By: Simon Marchi Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30330 Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31517 --- diff --git a/gdb/rust-lang.c b/gdb/rust-lang.c index 64e40577a69..53e7356c451 100644 --- a/gdb/rust-lang.c +++ b/gdb/rust-lang.c @@ -475,6 +475,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 = .*" }