Skip to content

Commit 0935beb

Browse files
committed
auto merge of #14486 : michaelwoerister/rust/unified_enum_rep, r=luqmana
So far the DWARF information for enums was different for regular enums, univariant enums, Option-like enums, etc. Regular enums were encoded as unions of structs, while the other variants were encoded as bare structs. With the changes in this PR all enums are encoded as unions so that debuggers can reconstruct if something originally was a struct, a univariant enum, or an Option-like enum. For the latter case, information about the *Null* variant is encoded into the union field name. This information can then be used by the debugger to print a `None` value actually as `None` instead of `Some(0x0)`. The changes in this PR should also fix the regression reported in #14385 and #14411, but I want to close these only after I have confirmation from the original reporters that the issues are actually fixed for them.
2 parents 729ee20 + eea329b commit 0935beb

11 files changed

+350
-228
lines changed

src/librustc/middle/trans/debuginfo.rs

+325-205
Large diffs are not rendered by default.

src/test/debuginfo/borrowed-enum.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
// gdb-check:$2 = {{TheB, x = 0, y = 1229782938247303441}, {TheB, 0, 286331153, 286331153}}
2323

2424
// gdb-command:print *univariant_ref
25-
// gdb-check:$3 = {4820353753753434}
25+
// gdb-check:$3 = {{4820353753753434}}
2626

2727
#![allow(unused_variable)]
2828
#![feature(struct_variant)]

src/test/debuginfo/generic-struct-style-enum.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
// gdb-check:$3 = {{Case3, a = 0, b = 22873, c = 22873, d = 22873, e = 22873}, {Case3, a = 0, b = 1499027801, c = 1499027801}, {Case3, a = 0, b = 6438275382588823897}}
2828

2929
// gdb-command:print univariant
30-
// gdb-check:$4 = {a = -1}
30+
// gdb-check:$4 = {{a = -1}}
3131

3232
#![feature(struct_variant)]
3333

src/test/debuginfo/generic-tuple-style-enum.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
// gdb-check:$3 = {{Case3, 0, 22873, 22873, 22873, 22873}, {Case3, 0, 1499027801, 1499027801}, {Case3, 0, 6438275382588823897}}
2828

2929
// gdb-command:print univariant
30-
// gdb-check:$4 = {-1}
30+
// gdb-check:$4 = {{-1}}
3131

3232

3333
// NOTE: This is a copy of the non-generic test case. The `Txx` type parameters have to be

src/test/debuginfo/managed-enum.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
// gdb-check:$2 = {{TheB, x = 0, y = 1229782938247303441}, {TheB, 0, 286331153, 286331153}}
2323

2424
// gdb-command:print univariant->val
25-
// gdb-check:$3 = {-9747455}
25+
// gdb-check:$3 = {{-9747455}}
2626

2727
#![allow(unused_variable)]
2828
#![feature(struct_variant, managed_boxes)]

src/test/debuginfo/option-like-enum.rs

+5-4
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
// option. This file may not be copied, modified, or distributed
99
// except according to those terms.
1010

11+
// ignore-tidy-linelength
1112
// ignore-android: FIXME(#10381)
1213

1314
// compile-flags:-g
@@ -16,19 +17,19 @@
1617
// gdb-command:finish
1718

1819
// gdb-command:print some
19-
// gdb-check:$1 = (u32 *) 0x12345678
20+
// gdb-check:$1 = {RUST$ENCODED$ENUM$0$None = {0x12345678}}
2021

2122
// gdb-command:print none
22-
// gdb-check:$2 = (u32 *) 0x0
23+
// gdb-check:$2 = {RUST$ENCODED$ENUM$0$None = {0x0}}
2324

2425
// gdb-command:print full
25-
// gdb-check:$3 = {454545, 0x87654321, 9988}
26+
// gdb-check:$3 = {RUST$ENCODED$ENUM$1$Empty = {454545, 0x87654321, 9988}}
2627

2728
// gdb-command:print empty->discr
2829
// gdb-check:$4 = (int *) 0x0
2930

3031
// gdb-command:print droid
31-
// gdb-check:$5 = {id = 675675, range = 10000001, internals = 0x43218765}
32+
// gdb-check:$5 = {RUST$ENCODED$ENUM$2$Void = {id = 675675, range = 10000001, internals = 0x43218765}}
3233

3334
// gdb-command:print void_droid->internals
3435
// gdb-check:$6 = (int *) 0x0

src/test/debuginfo/recursive-struct.rs

+12-11
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
// option. This file may not be copied, modified, or distributed
99
// except according to those terms.
1010

11+
// ignore-tidy-linelength
1112
// ignore-android: FIXME(#10381)
1213

1314
#![feature(managed_boxes)]
@@ -20,53 +21,53 @@
2021

2122
// gdb-command:print stack_unique.value
2223
// gdb-check:$1 = 0
23-
// gdb-command:print stack_unique.next->value
24+
// gdb-command:print stack_unique.next.RUST$ENCODED$ENUM$0$Empty.val->value
2425
// gdb-check:$2 = 1
2526

2627
// gdb-command:print unique_unique->value
2728
// gdb-check:$3 = 2
28-
// gdb-command:print unique_unique->next->value
29+
// gdb-command:print unique_unique->next.RUST$ENCODED$ENUM$0$Empty.val->value
2930
// gdb-check:$4 = 3
3031

3132
// gdb-command:print box_unique->val.value
3233
// gdb-check:$5 = 4
33-
// gdb-command:print box_unique->val.next->value
34+
// gdb-command:print box_unique->val.next.RUST$ENCODED$ENUM$0$Empty.val->value
3435
// gdb-check:$6 = 5
3536

3637
// gdb-command:print vec_unique[0].value
3738
// gdb-check:$7 = 6.5
38-
// gdb-command:print vec_unique[0].next->value
39+
// gdb-command:print vec_unique[0].next.RUST$ENCODED$ENUM$0$Empty.val->value
3940
// gdb-check:$8 = 7.5
4041

4142
// gdb-command:print borrowed_unique->value
4243
// gdb-check:$9 = 8.5
43-
// gdb-command:print borrowed_unique->next->value
44+
// gdb-command:print borrowed_unique->next.RUST$ENCODED$ENUM$0$Empty.val->value
4445
// gdb-check:$10 = 9.5
4546

4647
// MANAGED
4748
// gdb-command:print stack_managed.value
4849
// gdb-check:$11 = 10
49-
// gdb-command:print stack_managed.next.val->value
50+
// gdb-command:print stack_managed.next.RUST$ENCODED$ENUM$0$Empty.val->val.value
5051
// gdb-check:$12 = 11
5152

5253
// gdb-command:print unique_managed->value
5354
// gdb-check:$13 = 12
54-
// gdb-command:print unique_managed->next.val->value
55+
// gdb-command:print unique_managed->next.RUST$ENCODED$ENUM$0$Empty.val->val.value
5556
// gdb-check:$14 = 13
5657

5758
// gdb-command:print box_managed.val->value
5859
// gdb-check:$15 = 14
59-
// gdb-command:print box_managed->val->next.val->value
60+
// gdb-command:print box_managed->val->next.RUST$ENCODED$ENUM$0$Empty.val->val.value
6061
// gdb-check:$16 = 15
6162

6263
// gdb-command:print vec_managed[0].value
6364
// gdb-check:$17 = 16.5
64-
// gdb-command:print vec_managed[0].next.val->value
65+
// gdb-command:print vec_managed[0].next.RUST$ENCODED$ENUM$0$Empty.val->val.value
6566
// gdb-check:$18 = 17.5
6667

6768
// gdb-command:print borrowed_managed->value
6869
// gdb-check:$19 = 18.5
69-
// gdb-command:print borrowed_managed->next.val->value
70+
// gdb-command:print borrowed_managed->next.RUST$ENCODED$ENUM$0$Empty.val->val.value
7071
// gdb-check:$20 = 19.5
7172

7273
// LONG CYCLE
@@ -97,7 +98,7 @@
9798
// gdb-command:print (*****long_cycle_w_anonymous_types).value
9899
// gdb-check:$31 = 30
99100

100-
// gdb-command:print (*****((*****long_cycle_w_anonymous_types).next)).value
101+
// gdb-command:print (*****((*****long_cycle_w_anonymous_types).next.RUST$ENCODED$ENUM$0$Empty.val)).value
101102
// gdb-check:$32 = 31
102103

103104
// gdb-command:continue

src/test/debuginfo/struct-in-enum.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
// gdb-check:$2 = {{Case2, 0, {x = 286331153, y = 286331153, z = 4369}}, {Case2, 0, 1229782938247303441, 4369}}
2525

2626
// gdb-command:print univariant
27-
// gdb-check:$3 = {{x = 123, y = 456, z = 789}}
27+
// gdb-check:$3 = {{{x = 123, y = 456, z = 789}}}
2828

2929
#![allow(unused_variable)]
3030

src/test/debuginfo/struct-style-enum.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
// gdb-check:$3 = {{Case3, a = 0, b = 22873, c = 22873, d = 22873, e = 22873}, {Case3, a = 0, b = 1499027801, c = 1499027801}, {Case3, a = 0, b = 6438275382588823897}}
2828

2929
// gdb-command:print univariant
30-
// gdb-check:$4 = {a = -1}
30+
// gdb-check:$4 = {{a = -1}}
3131

3232
#![allow(unused_variable)]
3333
#![feature(struct_variant)]

src/test/debuginfo/tuple-style-enum.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
// gdb-check:$3 = {{Case3, 0, 22873, 22873, 22873, 22873}, {Case3, 0, 1499027801, 1499027801}, {Case3, 0, 6438275382588823897}}
2828

2929
// gdb-command:print univariant
30-
// gdb-check:$4 = {-1}
30+
// gdb-check:$4 = {{-1}}
3131

3232
#![allow(unused_variable)]
3333

src/test/debuginfo/unique-enum.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
// gdb-check:$2 = {{TheB, x = 0, y = 1229782938247303441}, {TheB, 0, 286331153, 286331153}}
2323

2424
// gdb-command:print *univariant
25-
// gdb-check:$3 = {123234}
25+
// gdb-check:$3 = {{123234}}
2626

2727
#![allow(unused_variable)]
2828
#![feature(struct_variant)]

0 commit comments

Comments
 (0)