diff options
| author | Eduard-Mihai Burtescu <edy.burt@gmail.com> | 2017-09-10 17:15:29 +0300 |
|---|---|---|
| committer | Eduard-Mihai Burtescu <edy.burt@gmail.com> | 2017-11-19 02:14:28 +0200 |
| commit | 44eef7c9ac6d2944131c4216136a2c39e0c5da30 (patch) | |
| tree | d1f28b28fda764097267bca70700a4f09889d5a8 /src/librustc_trans/debuginfo | |
| parent | 8afa3a01e61906459a25d305176137e14ba3f835 (diff) | |
| download | rust-44eef7c9ac6d2944131c4216136a2c39e0c5da30.tar.gz rust-44eef7c9ac6d2944131c4216136a2c39e0c5da30.zip | |
rustc: do not inject discriminant fields into Layout::General's variants.
Diffstat (limited to 'src/librustc_trans/debuginfo')
| -rw-r--r-- | src/librustc_trans/debuginfo/metadata.rs | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/librustc_trans/debuginfo/metadata.rs b/src/librustc_trans/debuginfo/metadata.rs index 2869ddb6e22..879a7467857 100644 --- a/src/librustc_trans/debuginfo/metadata.rs +++ b/src/librustc_trans/debuginfo/metadata.rs @@ -1340,7 +1340,7 @@ impl<'tcx> EnumMemberDescriptionFactory<'tcx> { // Creates MemberDescriptions for the fields of a single enum variant. struct VariantMemberDescriptionFactory<'tcx> { // Cloned from the layout::Struct describing the variant. - offsets: &'tcx [layout::Size], + offsets: Vec<layout::Size>, args: Vec<(String, Ty<'tcx>)>, discriminant_type_metadata: Option<DIType>, span: Span, @@ -1436,8 +1436,12 @@ fn describe_enum_variant<'a, 'tcx>(cx: &CrateContext<'a, 'tcx>, }; // If this is not a univariant enum, there is also the discriminant field. + let mut offsets = struct_def.offsets.clone(); match discriminant_info { - RegularDiscriminant(_) => arg_names.insert(0, "RUST$ENUM$DISR".to_string()), + RegularDiscriminant(_) => { + arg_names.insert(0, "RUST$ENUM$DISR".to_string()); + offsets.insert(0, Size::from_bytes(0)); + } _ => { /* do nothing */ } }; @@ -1449,7 +1453,7 @@ fn describe_enum_variant<'a, 'tcx>(cx: &CrateContext<'a, 'tcx>, let member_description_factory = VariantMDF(VariantMemberDescriptionFactory { - offsets: &struct_def.offsets[..], + offsets, args, discriminant_type_metadata: match discriminant_info { RegularDiscriminant(discriminant_type_metadata) => { |
