diff options
author | Tom Tromey <tom@tromey.com> | 2018-06-08 13:18:25 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2018-06-26 14:53:17 -0600 |
commit | a33ccfc7afd9e32dd310f54d04719efeec8df342 (patch) | |
tree | 66b30fdfb22c12b28d36bd7308b74ebec6a3e36c /gdb/testsuite/gdb.rust/simple.rs | |
parent | e0c547d14ae1d5c06b59178f4b1dd1f5e08b3feb (diff) | |
download | binutils-a33ccfc7afd9e32dd310f54d04719efeec8df342.zip binutils-a33ccfc7afd9e32dd310f54d04719efeec8df342.tar.gz binutils-a33ccfc7afd9e32dd310f54d04719efeec8df342.tar.bz2 |
Support ptype/o in Rust
This adds support for ptype/o to the Rust language code.
By default, the Rust compiler reorders fields to reduce padding. So,
the Rust language code sorts the fields by offset before printing.
This may yield somewhat odd-looking results, but it is faithful to
"what really happens", and might be useful when doing lower-level
debugging.
The reordering can be disabled using #[repr(c)]; ptype/o might be more
useful in this case.
gdb/ChangeLog
2018-06-26 Tom Tromey <tom@tromey.com>
PR rust/22574:
* typeprint.c (whatis_exp): Allow ptype/o for Rust.
* rust-lang.c (rust_print_struct_def): Add podata parameter.
Update.
(rust_internal_print_type): Add podata parameter.
(rust_print_type): Update.
gdb/testsuite/ChangeLog
2018-06-26 Tom Tromey <tom@tromey.com>
PR rust/22574:
* gdb.rust/simple.exp (test_one_slice): Add ptype/o tests.
* gdb.rust/simple.rs (struct SimpleLayout): New.
Diffstat (limited to 'gdb/testsuite/gdb.rust/simple.rs')
-rw-r--r-- | gdb/testsuite/gdb.rust/simple.rs | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.rust/simple.rs b/gdb/testsuite/gdb.rust/simple.rs index e5bbe52..9d89361 100644 --- a/gdb/testsuite/gdb.rust/simple.rs +++ b/gdb/testsuite/gdb.rust/simple.rs @@ -85,6 +85,13 @@ union Union { f2: u8, } +// A simple structure whose layout won't be changed by the compiler, +// so that ptype/o testing will work on any platform. +struct SimpleLayout { + f1: u16, + f2: u16 +} + fn main () { let a = (); let b : [i32; 0] = []; @@ -159,6 +166,7 @@ fn main () { }; let u = Union { f2: 255 }; + let v = SimpleLayout { f1: 8, f2: 9 }; println!("{}, {}", x.0, x.1); // set breakpoint here println!("{}", diff2(92, 45)); |