Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* [v2] Fix Rust enum test failures
@ 2018-02-28 15:55 Tom Tromey
  2018-02-28 16:12 ` Tom Tromey
  2018-03-01  2:59 ` Joel Brobecker
  0 siblings, 2 replies; 3+ messages in thread
From: Tom Tromey @ 2018-02-28 15:55 UTC (permalink / raw)
  To: gdb-patches; +Cc: Tom Tromey

Pedro pointed out that some Rust tests were failing after the recent
enum change.  I was able to reproduce this even with the most current
Rust compiler -- no test was failing, but rather the gdb internal
error was causing an "untested" result, which I didn't notice.

The internal error is caused by a bad assertion in
alloc_discriminant_info.  This happened because, in an earlier version
of the patch, the discriminant could only appear at index 0.  However,
it can now appear anywhere.  This patch fixes the assertion in the
obvious way, and adds a second assertion to ensure that the
discriminant is also correct.

Fixing this revealed a real failure, which was caused by using the
wrong base name when computing the name of a univariant enum's sole
member.  This is also fixed here.

Tested by running the gdb.rust tests with rustc 1.23 and
double-checking the summary:

    # of expected passes		276

Note that if you try this yourself, it is still possible to get an
"untested" result from traits.exp if your Rust compiler is old enough.

2018-02-28  Tom Tromey  <tom@tromey.com>

	* dwarf2read.c (alloc_discriminant_info): Fix default_index
	assertion.  Add assertion for discriminant_index.
	(quirk_rust_enum): Use correct base type name in univariant case.
---
 gdb/ChangeLog    | 6 ++++++
 gdb/dwarf2read.c | 7 +++++--
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 8ab6381add..5d2778fc06 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,9 @@
+2018-02-28  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2read.c (alloc_discriminant_info): Fix default_index
+	assertion.  Add assertion for discriminant_index.
+	(quirk_rust_enum): Use correct base type name in univariant case.
+
 2018-02-28  John Baldwin  <jhb@FreeBSD.org>
 
 	* fbsd-nat.c (fbsd_resume): Use PT_SETSTEP for stepping and a
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
index 1e4376e4de..aea46d50c0 100644
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -10363,8 +10363,11 @@ alloc_discriminant_info (struct type *type, int discriminant_index,
 			 int default_index)
 {
   gdb_assert (TYPE_CODE (type) == TYPE_CODE_UNION);
+  gdb_assert (discriminant_index == -1
+	      || (discriminant_index >= 0
+		  && discriminant_index < TYPE_NFIELDS (type)));
   gdb_assert (default_index == -1
-	      || (default_index > 0 && default_index < TYPE_NFIELDS (type)));
+	      || (default_index >= 0 && default_index < TYPE_NFIELDS (type)));
 
   TYPE_FLAG_DISCRIMINATED_UNION (type) = 1;
 
@@ -10517,7 +10520,7 @@ quirk_rust_enum (struct type *type, struct objfile *objfile)
       TYPE_FIELD_NAME (union_type, 0) = variant_name;
       TYPE_NAME (field_type)
 	= rust_fully_qualify (&objfile->objfile_obstack,
-			      TYPE_NAME (field_type), variant_name);
+			      TYPE_NAME (type), variant_name);
 
       /* Install the union in the outer struct type.  */
       TYPE_NFIELDS (type) = 1;
-- 
2.13.6


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [v2] Fix Rust enum test failures
  2018-02-28 15:55 [v2] Fix Rust enum test failures Tom Tromey
@ 2018-02-28 16:12 ` Tom Tromey
  2018-03-01  2:59 ` Joel Brobecker
  1 sibling, 0 replies; 3+ messages in thread
From: Tom Tromey @ 2018-02-28 16:12 UTC (permalink / raw)
  To: Tom Tromey; +Cc: gdb-patches

>>>>> "Tom" == Tom Tromey <tom@tromey.com> writes:

Tom> Pedro pointed out that some Rust tests were failing after the recent
Tom> enum change.

The subject here was supposed to read "[RFA]".

Tom


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [v2] Fix Rust enum test failures
  2018-02-28 15:55 [v2] Fix Rust enum test failures Tom Tromey
  2018-02-28 16:12 ` Tom Tromey
@ 2018-03-01  2:59 ` Joel Brobecker
  1 sibling, 0 replies; 3+ messages in thread
From: Joel Brobecker @ 2018-03-01  2:59 UTC (permalink / raw)
  To: Tom Tromey; +Cc: gdb-patches

Hi Tom,

> 2018-02-28  Tom Tromey  <tom@tromey.com>
> 
> 	* dwarf2read.c (alloc_discriminant_info): Fix default_index
> 	assertion.  Add assertion for discriminant_index.
> 	(quirk_rust_enum): Use correct base type name in univariant case.

Looks good to me. Thanks for the quick fix.

-- 
Joel


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2018-03-01  2:59 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-02-28 15:55 [v2] Fix Rust enum test failures Tom Tromey
2018-02-28 16:12 ` Tom Tromey
2018-03-01  2:59 ` Joel Brobecker

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox