public inbox for gdb-cvs@sourceware.org
help / color / mirror / Atom feed
* [binutils-gdb] Print type name when printing Rust slice
@ 2024-04-02 17:44 Tom Tromey
  0 siblings, 0 replies; only message in thread
From: Tom Tromey @ 2024-04-02 17:44 UTC (permalink / raw)
  To: gdb-cvs

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=251cedaeb57fe1e0fd28798f476fbee75373bbf4

commit 251cedaeb57fe1e0fd28798f476fbee75373bbf4
Author: Tom Tromey <tromey@adacore.com>
Date:   Thu Mar 7 12:57:07 2024 -0700

    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 <simon.marchi@efficios.com>
    Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30330
    Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31517

Diff:
---
 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 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 = .*"
 }

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2024-04-02 17:44 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-04-02 17:44 [binutils-gdb] Print type name when printing Rust slice Tom Tromey

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).