diff options
author | Tom Tromey <tom@tromey.com> | 2023-02-09 12:12:42 -0700 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2023-02-27 11:12:11 -0700 |
commit | debd0556e519c3d258299cf5f14a44cc01c795da (patch) | |
tree | 31de598b7d1f797a7813b74485c56db5379ef3c8 /gdb/rust-lang.c | |
parent | 810fbe39b2712853d08df74469f373254b5f30cc (diff) | |
download | gdb-debd0556e519c3d258299cf5f14a44cc01c795da.zip gdb-debd0556e519c3d258299cf5f14a44cc01c795da.tar.gz gdb-debd0556e519c3d258299cf5f14a44cc01c795da.tar.bz2 |
Fix crash with "finish" in Rust
PR rust/30090 points out that a certain "finish" in a Rust program
will cause gdb to crash. This happens due to some confusion about
field indices in rust_language::print_enum. The fix is to use
value_primitive_field so that the correct type can be passed; other
spots in rust-lang.c already do this.
Note that the enclosed test case comes with an xfail. This is needed
because for this function, rustc doesn't follow the platform ABI.
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30090
Diffstat (limited to 'gdb/rust-lang.c')
-rw-r--r-- | gdb/rust-lang.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/gdb/rust-lang.c b/gdb/rust-lang.c index fe260f1..6fc73b2 100644 --- a/gdb/rust-lang.c +++ b/gdb/rust-lang.c @@ -470,7 +470,7 @@ rust_language::print_enum (struct value *val, struct ui_file *stream, } int variant_fieldno = rust_enum_variant (type); - val = value_field (val, variant_fieldno); + val = val->primitive_field (0, variant_fieldno, type); struct type *variant_type = type->field (variant_fieldno).type (); int nfields = variant_type->num_fields (); |