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
This commit is contained in:
Tom Tromey
2023-02-09 12:12:42 -07:00
parent 810fbe39b2
commit debd0556e5
3 changed files with 70 additions and 1 deletions

View File

@ -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 ();