Allow empty struct expressions in Rust

I learned recently that empty struct expressions, like "X{}", have been
promoted from experimental to stable in Rust.  This patch changes the
Rust expression parser to allow this case.

New test case included.
Built and regtested on x86-64 Fedora 23, using Rust 1.11 beta.

2016-07-21  Tom Tromey  <tom@tromey.com>

	* rust-lang.c (rust_tuple_struct_type_p): Return false for empty
	structs.
	* rust-exp.y (struct_expr_list): Allow empty elements.

2016-07-21  Tom Tromey  <tom@tromey.com>

	* gdb.rust/simple.rs (main): Use empty struct expression.
	* gdb.rust/simple.exp: Add tests for empty struct expression.
This commit is contained in:
Tom Tromey 2016-07-11 15:02:10 -06:00
parent 305450edd3
commit 12df5c002d
6 changed files with 26 additions and 4 deletions

View file

@ -294,7 +294,10 @@ rust_underscore_fields (struct type *type, int offset)
int
rust_tuple_struct_type_p (struct type *type)
{
return rust_underscore_fields (type, 0);
/* This is just an approximation until DWARF can represent Rust more
precisely. We exclude zero-length structs because they may not
be tuple structs, and there's no way to tell. */
return TYPE_NFIELDS (type) > 0 && rust_underscore_fields (type, 0);
}
/* Return true if a variant TYPE is a tuple variant, false otherwise. */