diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 436446c9f0b..3939d235cfc 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2018-11-16 Tom Tromey + + PR rust/23625: + * rust-lang.c (rust_internal_print_type): Handle TYPE_CODE_PTR. + 2018-11-19 Simon Marchi * infrun.c (displaced_step_inferior_states): Change type to diff --git a/gdb/rust-lang.c b/gdb/rust-lang.c index 152413a612f..0a327ee6195 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't 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 e7693a07f54..daa283994c2 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2018-11-19 Tom Tromey + + PR rust/23625: + * gdb.rust/simple.exp: Add ptype test. Update expected output. + * gdb.rust/expr.exp: Update expected output. Change one test. + 2018-11-19 Tom Tromey * gdb.rust/simple.rs: Don't initialize empty_enum_value. diff --git a/gdb/testsuite/gdb.rust/expr.exp b/gdb/testsuite/gdb.rust/expr.exp index 22e6b49b542..ec230c1a1a8 100644 --- a/gdb/testsuite/gdb.rust/expr.exp +++ b/gdb/testsuite/gdb.rust/expr.exp @@ -134,8 +134,8 @@ gdb_test "ptype \[23usize; 4\]" " = \\\[usize; 4\\\]" gdb_test "print \[mut 23usize; 4\]" " = \\\[23, 23, 23, 23\\\]" # Test lexer corner cases. -gdb_test "print 0x0 as *const ()" " = \\\(\\\(\\\) \\*\\\) 0x0" -gdb_test "print 0x0 as fn(i64) -> ()" " = \\\(\\\(\\\) \\\(\\*\\\)\\\(i64\\\)\\\) 0x0" +gdb_test "print 0x0 as *mut ()" " = \\\(\\*mut \\\(\\\)\\\) 0x0" +gdb_test "print 0x0 as fn(i64) -> ()" " = \\\(\\*mut fn \\\(i64\\\) -> \\\(\\\)\\\) 0x0" gdb_test "print r#" "syntax error in expression, near `#'\\." gdb_test "printf \"%d %d\\n\", 23+1, 23-1" "24 22" diff --git a/gdb/testsuite/gdb.rust/simple.exp b/gdb/testsuite/gdb.rust/simple.exp index 956a6ca6fee..f02ff676db6 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'" @@ -68,8 +69,8 @@ gdb_test "print f" " = \"hi bob\"" gdb_test "print fslice" " = \"bob\"" gdb_test "print &f\[3..\]" " = \"bob\"" -gdb_test "print g" " = \\(u8 \\(\\*\\)\\\[6\\\]\\) $hex b\"hi bob\"" -gdb_test "ptype g" " = u8 \\(\\*\\)\\\[6\\\]" +gdb_test "print g" " = \\(\\*mut \\\[u8; 6\\\]\\) $hex b\"hi bob\"" +gdb_test "ptype g" " = \\*mut \\\[u8; 6\\\]" gdb_test "print v" " = simple::Something::Three" gdb_test_sequence "ptype v" "" { @@ -91,19 +92,19 @@ gdb_test "print slice as &\[i32\]\[0\]" " = 3" gdb_test_sequence "ptype slice" "" { " = struct &\\\[i32\\\] \\{" - " data_ptr: i32 \\*," + " data_ptr: \\*mut i32," " length: usize," "\\}" } gdb_test_sequence "ptype &slice\[..\]" "" { " = struct &\\\[i32\\\] \\{" - " data_ptr: i32 \\*," + " data_ptr: \\*mut i32," " length: usize," "\\}" } gdb_test_sequence "ptype &b\[..\]" "" { " = struct &\\\[\\*gdb\\*\\\] \\{" - " data_ptr: i32 \\*," + " data_ptr: \\*mut i32," " length: usize," "\\}" } @@ -281,7 +282,7 @@ gdb_test "print 23..97.0" "Range expression with different types" gdb_test "print (*parametrized.next.val)" \ " = simple::ParametrizedStruct {next: simple::ParametrizedEnum<\[a-z:\]*Box>>::Empty, value: 1}" gdb_test "print parametrized.next.val" \ - " = \\(simple::ParametrizedStruct \\*\\) $hex" + " = \\(\\*mut simple::ParametrizedStruct\\) $hex" gdb_test "print parametrized" \ " = simple::ParametrizedStruct \\{next: simple::ParametrizedEnum<\[a-z:\]*Box>>::Val\\{val: $hex\\}, value: 0\\}"