Tom Tromey
2018-11-16 22:33:05 UTC
This changes the Rust type printers to handle TYPE_CODE_PTR. The
current approach is not ideal, because currently the code can't
distinguish between mut and const, or between pointers and references.
(These are debuginfo deficiencies, for which there are rustc bugs on
file.)
Meanwhile, this at least clears up the case seen in PR rust/23625.
Tested on x86-64 Fedora 28 using the current Rust stable compiler.
gdb/ChangeLog
2018-11-16 Tom Tromey <***@tromey.com>
PR rust/23625:
* rust-lang.c (rust_internal_print_type): Handle TYPE_CODE_PTR.
gdb/testsuite/ChangeLog
2018-11-16 Tom Tromey <***@tromey.com>
PR rust/23625:
* gdb.rust/simple.exp: Add ptype test.
---
gdb/ChangeLog | 5 +++++
gdb/rust-lang.c | 14 ++++++++++++++
gdb/testsuite/ChangeLog | 5 +++++
gdb/testsuite/gdb.rust/simple.exp | 1 +
4 files changed, 25 insertions(+)
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 4995d551979..ed5123d6b22 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,8 @@
+2018-11-16 Tom Tromey <***@tromey.com>
+
+ PR rust/23625:
+ * rust-lang.c (rust_internal_print_type): Handle TYPE_CODE_PTR.
+
2018-11-16 Alan Hayward <***@arm.com>
PR gdb/22736:
diff --git a/gdb/rust-lang.c b/gdb/rust-lang.c
index 152413a612f..12a9c0b4895 100644
--- a/gdb/rust-lang.c
+++ b/gdb/rust-lang.c
@@ -918,6 +918,20 @@ rust_internal_print_type (struct type *type, const char *varstring,
}
break;
+ case TYPE_CODE_PTR:
+ {
+ if (TYPE_NAME (type) != nullptr)
+ fputs_filtered (TYPE_NAME (type), stream);
+ else
+ {
+ /* We currently can distinguish between pointers and
+ references. */
+ fputs_filtered ("*mut ", stream);
+ type_print (TYPE_TARGET_TYPE (type), "", stream, 0);
+ }
+ }
+ break;
+
default:
c_printer:
c_print_type (type, varstring, stream, show, level, flags);
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index c0de6f2d6cd..4aa9bceb545 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2018-11-16 Tom Tromey <***@tromey.com>
+
+ PR rust/23625:
+ * gdb.rust/simple.exp: Add ptype test.
+
2018-11-16 Alan Hayward <***@arm.com>
PR gdb/22736:
diff --git a/gdb/testsuite/gdb.rust/simple.exp b/gdb/testsuite/gdb.rust/simple.exp
index 956a6ca6fee..e26435abb29 100644
--- a/gdb/testsuite/gdb.rust/simple.exp
+++ b/gdb/testsuite/gdb.rust/simple.exp
@@ -54,6 +54,7 @@ gdb_test "print *&c" " = 0"
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 "ptype &c as *mut i32" "\\*mut i32"
gdb_test "print/c f\[0\]" " = 104 'h'"
current approach is not ideal, because currently the code can't
distinguish between mut and const, or between pointers and references.
(These are debuginfo deficiencies, for which there are rustc bugs on
file.)
Meanwhile, this at least clears up the case seen in PR rust/23625.
Tested on x86-64 Fedora 28 using the current Rust stable compiler.
gdb/ChangeLog
2018-11-16 Tom Tromey <***@tromey.com>
PR rust/23625:
* rust-lang.c (rust_internal_print_type): Handle TYPE_CODE_PTR.
gdb/testsuite/ChangeLog
2018-11-16 Tom Tromey <***@tromey.com>
PR rust/23625:
* gdb.rust/simple.exp: Add ptype test.
---
gdb/ChangeLog | 5 +++++
gdb/rust-lang.c | 14 ++++++++++++++
gdb/testsuite/ChangeLog | 5 +++++
gdb/testsuite/gdb.rust/simple.exp | 1 +
4 files changed, 25 insertions(+)
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 4995d551979..ed5123d6b22 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,8 @@
+2018-11-16 Tom Tromey <***@tromey.com>
+
+ PR rust/23625:
+ * rust-lang.c (rust_internal_print_type): Handle TYPE_CODE_PTR.
+
2018-11-16 Alan Hayward <***@arm.com>
PR gdb/22736:
diff --git a/gdb/rust-lang.c b/gdb/rust-lang.c
index 152413a612f..12a9c0b4895 100644
--- a/gdb/rust-lang.c
+++ b/gdb/rust-lang.c
@@ -918,6 +918,20 @@ rust_internal_print_type (struct type *type, const char *varstring,
}
break;
+ case TYPE_CODE_PTR:
+ {
+ if (TYPE_NAME (type) != nullptr)
+ fputs_filtered (TYPE_NAME (type), stream);
+ else
+ {
+ /* We currently can distinguish between pointers and
+ references. */
+ fputs_filtered ("*mut ", stream);
+ type_print (TYPE_TARGET_TYPE (type), "", stream, 0);
+ }
+ }
+ break;
+
default:
c_printer:
c_print_type (type, varstring, stream, show, level, flags);
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index c0de6f2d6cd..4aa9bceb545 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2018-11-16 Tom Tromey <***@tromey.com>
+
+ PR rust/23625:
+ * gdb.rust/simple.exp: Add ptype test.
+
2018-11-16 Alan Hayward <***@arm.com>
PR gdb/22736:
diff --git a/gdb/testsuite/gdb.rust/simple.exp b/gdb/testsuite/gdb.rust/simple.exp
index 956a6ca6fee..e26435abb29 100644
--- a/gdb/testsuite/gdb.rust/simple.exp
+++ b/gdb/testsuite/gdb.rust/simple.exp
@@ -54,6 +54,7 @@ gdb_test "print *&c" " = 0"
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 "ptype &c as *mut i32" "\\*mut i32"
gdb_test "print/c f\[0\]" " = 104 'h'"
--
2.17.2
2.17.2