about summary refs log tree commit diff
path: root/src/librustc_trans/debuginfo
diff options
context:
space:
mode:
authorEduard-Mihai Burtescu <edy.burt@gmail.com>2017-09-10 17:15:29 +0300
committerEduard-Mihai Burtescu <edy.burt@gmail.com>2017-11-19 02:14:28 +0200
commit44eef7c9ac6d2944131c4216136a2c39e0c5da30 (patch)
treed1f28b28fda764097267bca70700a4f09889d5a8 /src/librustc_trans/debuginfo
parent8afa3a01e61906459a25d305176137e14ba3f835 (diff)
downloadrust-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.rs10
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) => {