[FYI,1/3] Allow indexing of &str in Rust

Message ID 20171002201041.4815-2-tom@tromey.com
State New, archived
Headers

Commit Message

Tom Tromey Oct. 2, 2017, 8:10 p.m. UTC
  rust_slice_type_p was not recognizing &str as a slice type, so indexing
into (or making a slice of) a slice was not working.

2017-10-02  Tom Tromey  <tom@tromey.com>

	* rust-lang.c (rust_slice_type_p): Recognize &str as a slice type.

2017-10-02  Tom Tromey  <tom@tromey.com>

	* gdb.rust/simple.exp: Test index of slice.
---
 gdb/ChangeLog                     | 4 ++++
 gdb/rust-lang.c                   | 3 ++-
 gdb/testsuite/ChangeLog           | 4 ++++
 gdb/testsuite/gdb.rust/simple.exp | 2 ++
 4 files changed, 12 insertions(+), 1 deletion(-)
  

Patch

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index f5b265b..a8820c8 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,9 @@ 
 2017-10-02  Tom Tromey  <tom@tromey.com>
 
+	* rust-lang.c (rust_slice_type_p): Recognize &str as a slice type.
+
+2017-10-02  Tom Tromey  <tom@tromey.com>
+
 	* rust-lang.h (rust_slice_type): Add "extern".
 
 2017-10-02  Tom Tromey  <tom@tromey.com>
diff --git a/gdb/rust-lang.c b/gdb/rust-lang.c
index c5764bf..a9895fe 100644
--- a/gdb/rust-lang.c
+++ b/gdb/rust-lang.c
@@ -340,7 +340,8 @@  rust_slice_type_p (struct type *type)
 {
   return (TYPE_CODE (type) == TYPE_CODE_STRUCT
 	  && TYPE_TAG_NAME (type) != NULL
-	  && strncmp (TYPE_TAG_NAME (type), "&[", 2) == 0);
+	  && (strncmp (TYPE_TAG_NAME (type), "&[", 2) == 0
+	      || strcmp (TYPE_TAG_NAME (type), "&str") == 0));
 }
 
 /* Return true if TYPE is a range type, otherwise false.  */
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 4348e76..edc5079 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,7 @@ 
+2017-10-02  Tom Tromey  <tom@tromey.com>
+
+	* gdb.rust/simple.exp: Test index of slice.
+
 2017-09-27  Tom Tromey  <tom@tromey.com>
 
 	* gdb.base/macscp.exp: Add __VA_OPT__ tests.
diff --git a/gdb/testsuite/gdb.rust/simple.exp b/gdb/testsuite/gdb.rust/simple.exp
index 403a11b..1a46317 100644
--- a/gdb/testsuite/gdb.rust/simple.exp
+++ b/gdb/testsuite/gdb.rust/simple.exp
@@ -55,6 +55,8 @@  gdb_test "print *(&c as &i32)" " = 0"
 gdb_test "print *(&c as *const i32)" " = 0"
 gdb_test "print *(&c as *mut i32)" " = 0"
 
+gdb_test "print/c f\[0\]" " = 104 'h'"
+
 gdb_test "print j" " = simple::Unit"
 gdb_test "ptype j" " = struct simple::Unit"
 gdb_test "print j2" " = simple::Unit"