Skip to content

Commit 760bd87

Browse files
committed
Make generator object debuginfo easier to read
1 parent 4a3721f commit 760bd87

File tree

2 files changed

+21
-12
lines changed

2 files changed

+21
-12
lines changed

src/librustc_codegen_llvm/debuginfo/metadata.rs

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1333,7 +1333,7 @@ impl EnumMemberDescriptionFactory<'ll, 'tcx> {
13331333
name: if fallback {
13341334
String::new()
13351335
} else {
1336-
variant_info.name_as_string()
1336+
variant_info.variant_name()
13371337
},
13381338
type_metadata: variant_type_metadata,
13391339
offset: Size::ZERO,
@@ -1388,7 +1388,7 @@ impl EnumMemberDescriptionFactory<'ll, 'tcx> {
13881388
name: if fallback {
13891389
String::new()
13901390
} else {
1391-
variant_info.name_as_string()
1391+
variant_info.variant_name()
13921392
},
13931393
type_metadata: variant_type_metadata,
13941394
offset: Size::ZERO,
@@ -1455,7 +1455,7 @@ impl EnumMemberDescriptionFactory<'ll, 'tcx> {
14551455
self.layout,
14561456
self.layout.fields.offset(discr_index),
14571457
self.layout.field(cx, discr_index).size);
1458-
variant_info_for(*niche_variants.start()).map_name(|variant_name| {
1458+
variant_info_for(*niche_variants.start()).map_struct_name(|variant_name| {
14591459
name.push_str(variant_name);
14601460
});
14611461

@@ -1506,7 +1506,7 @@ impl EnumMemberDescriptionFactory<'ll, 'tcx> {
15061506
};
15071507

15081508
MemberDescription {
1509-
name: variant_info.name_as_string(),
1509+
name: variant_info.variant_name(),
15101510
type_metadata: variant_type_metadata,
15111511
offset: Size::ZERO,
15121512
size: self.layout.size,
@@ -1571,16 +1571,25 @@ enum VariantInfo<'tcx> {
15711571
}
15721572

15731573
impl<'tcx> VariantInfo<'tcx> {
1574-
fn map_name<R>(&self, f: impl FnOnce(&str) -> R) -> R {
1574+
fn map_struct_name<R>(&self, f: impl FnOnce(&str) -> R) -> R {
15751575
match self {
15761576
VariantInfo::Adt(variant) => f(&variant.ident.as_str()),
15771577
VariantInfo::Generator(substs, variant_index) =>
15781578
substs.map_variant_name(*variant_index, f),
15791579
}
15801580
}
15811581

1582-
fn name_as_string(&self) -> String {
1583-
self.map_name(|name| name.to_string())
1582+
fn variant_name(&self) -> String {
1583+
match self {
1584+
VariantInfo::Adt(variant) => variant.ident.to_string(),
1585+
VariantInfo::Generator(_, variant_index) => {
1586+
// Since GDB currently prints out the raw discriminant along
1587+
// with every variant, make each variant name be just the value
1588+
// of the discriminant. The struct name for the variant includes
1589+
// the actual variant description.
1590+
format!("{}", variant_index.as_usize()).to_string()
1591+
}
1592+
}
15841593
}
15851594

15861595
fn field_name(&self, i: usize) -> String {
@@ -1604,7 +1613,7 @@ fn describe_enum_variant(
16041613
containing_scope: &'ll DIScope,
16051614
span: Span,
16061615
) -> (&'ll DICompositeType, MemberDescriptionFactory<'ll, 'tcx>) {
1607-
let metadata_stub = variant.map_name(|variant_name| {
1616+
let metadata_stub = variant.map_struct_name(|variant_name| {
16081617
let unique_type_id = debug_context(cx).type_map
16091618
.borrow_mut()
16101619
.get_unique_type_id_of_enum_variant(

src/test/debuginfo/generator-objects.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,16 @@
1010

1111
// gdb-command:run
1212
// gdb-command:print b
13-
// gdb-check:$1 = generator_objects::main::generator {__0: 0x[...], <<variant>>: {__state: 0, Unresumed: generator_objects::main::generator::Unresumed, Returned: generator_objects::main::generator::Returned, Panicked: generator_objects::main::generator::Panicked, variant#3: generator_objects::main::generator::variant#3 ([...]), variant#4: generator_objects::main::generator::variant#4 ([...])}}
13+
// gdb-check:$1 = generator_objects::main::generator {__0: 0x[...], <<variant>>: {__state: 0, 0: generator_objects::main::generator::Unresumed, 1: generator_objects::main::generator::Returned, 2: generator_objects::main::generator::Panicked, 3: generator_objects::main::generator::variant#3 ([...]), 4: generator_objects::main::generator::variant#4 ([...])}}
1414
// gdb-command:continue
1515
// gdb-command:print b
16-
// gdb-check:$2 = generator_objects::main::generator {__0: 0x[...], <<variant>>: {__state: 3, Unresumed: generator_objects::main::generator::Unresumed, Returned: generator_objects::main::generator::Returned, Panicked: generator_objects::main::generator::Panicked, variant#3: generator_objects::main::generator::variant#3 (6, 7), variant#4: generator_objects::main::generator::variant#4 ([...])}}
16+
// gdb-check:$2 = generator_objects::main::generator {__0: 0x[...], <<variant>>: {__state: 3, 0: generator_objects::main::generator::Unresumed, 1: generator_objects::main::generator::Returned, 2: generator_objects::main::generator::Panicked, 3: generator_objects::main::generator::variant#3 (6, 7), 4: generator_objects::main::generator::variant#4 ([...])}}
1717
// gdb-command:continue
1818
// gdb-command:print b
19-
// gdb-check:$3 = generator_objects::main::generator {__0: 0x[...], <<variant>>: {__state: 4, Unresumed: generator_objects::main::generator::Unresumed, Returned: generator_objects::main::generator::Returned, Panicked: generator_objects::main::generator::Panicked, variant#3: generator_objects::main::generator::variant#3 ([...]), variant#4: generator_objects::main::generator::variant#4 (7, 8)}}
19+
// gdb-check:$3 = generator_objects::main::generator {__0: 0x[...], <<variant>>: {__state: 4, 0: generator_objects::main::generator::Unresumed, 1: generator_objects::main::generator::Returned, 2: generator_objects::main::generator::Panicked, 3: generator_objects::main::generator::variant#3 ([...]), 4: generator_objects::main::generator::variant#4 (7, 8)}}
2020
// gdb-command:continue
2121
// gdb-command:print b
22-
// gdb-check:$4 = generator_objects::main::generator {__0: 0x[...], <<variant>>: {__state: 1, Unresumed: generator_objects::main::generator::Unresumed, Returned: generator_objects::main::generator::Returned, Panicked: generator_objects::main::generator::Panicked, variant#3: generator_objects::main::generator::variant#3 ([...]), variant#4: generator_objects::main::generator::variant#4 ([...])}}
22+
// gdb-check:$4 = generator_objects::main::generator {__0: 0x[...], <<variant>>: {__state: 1, 0: generator_objects::main::generator::Unresumed, 1: generator_objects::main::generator::Returned, 2: generator_objects::main::generator::Panicked, 3: generator_objects::main::generator::variant#3 ([...]), 4: generator_objects::main::generator::variant#4 ([...])}}
2323

2424
// === LLDB TESTS ==================================================================================
2525

0 commit comments

Comments
 (0)