From 38a6eca29ddb51be3c6e1757fd0287e270e1323a Mon Sep 17 00:00:00 2001 From: Samuel Wilson Date: Fri, 4 May 2018 22:32:08 +1200 Subject: [PATCH] issue-49938: Reference tagged unions discr(iminant) as tag Refer https://github.com/rust-lang/rust/issues/49938 Previously tagged unions' tag was refered to as a discr(iminant). Here the changes use tag instead which is the correct terminology when refering to the memory representation of tagged unions. --- src/librustc/ty/layout.rs | 10 +++++----- src/librustc_lint/types.rs | 4 ++-- src/librustc_mir/interpret/eval_context.rs | 8 ++++---- src/librustc_target/abi/mod.rs | 6 +++--- src/librustc_trans/debuginfo/metadata.rs | 4 ++-- src/librustc_trans/mir/place.rs | 4 ++-- 6 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/librustc/ty/layout.rs b/src/librustc/ty/layout.rs index a319b341ebbf..02c4b73efa14 100644 --- a/src/librustc/ty/layout.rs +++ b/src/librustc/ty/layout.rs @@ -1057,7 +1057,7 @@ impl<'a, 'tcx> LayoutCx<'tcx, TyCtxt<'a, 'tcx, 'tcx>> { } tcx.intern_layout(LayoutDetails { variants: Variants::Tagged { - discr: tag, + tag, variants: layout_variants, }, fields: FieldPlacement::Arbitrary { @@ -1218,7 +1218,7 @@ impl<'a, 'tcx> LayoutCx<'tcx, TyCtxt<'a, 'tcx, 'tcx>> { }) .collect(); record(adt_kind.into(), adt_packed, match layout.variants { - Variants::Tagged { ref discr, .. } => Some(discr.value.size(self)), + Variants::Tagged { ref tag, .. } => Some(tag.value.size(self)), _ => None }, variant_infos); } @@ -1622,7 +1622,7 @@ impl<'a, 'tcx, C> TyLayoutMethods<'tcx, C> for Ty<'tcx> } // Discriminant field for enums (where applicable). - Variants::Tagged { ref discr, .. } | + Variants::Tagged { tag: ref discr, .. } | Variants::NicheFilling { niche: ref discr, .. } => { assert_eq!(i, 0); let layout = LayoutDetails::scalar(tcx, discr.clone()); @@ -1736,10 +1736,10 @@ impl<'a> HashStable> for Variants { index.hash_stable(hcx, hasher); } Tagged { - ref discr, + ref tag, ref variants, } => { - discr.hash_stable(hcx, hasher); + tag.hash_stable(hcx, hasher); variants.hash_stable(hcx, hasher); } NicheFilling { diff --git a/src/librustc_lint/types.rs b/src/librustc_lint/types.rs index 904a3e4c4274..9e0dc4d80c8e 100644 --- a/src/librustc_lint/types.rs +++ b/src/librustc_lint/types.rs @@ -820,8 +820,8 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for VariantSizeDifferences { bug!("failed to get layout for `{}`: {}", t, e) }); - if let layout::Variants::Tagged { ref variants, ref discr, .. } = layout.variants { - let discr_size = discr.value.size(cx.tcx).bytes(); + if let layout::Variants::Tagged { ref variants, ref tag, .. } = layout.variants { + let discr_size = tag.value.size(cx.tcx).bytes(); debug!("enum `{}` is {} bytes large with layout:\n{:#?}", t, layout.size.bytes(), layout); diff --git a/src/librustc_mir/interpret/eval_context.rs b/src/librustc_mir/interpret/eval_context.rs index bea29b6926aa..f5fd14036c4d 100644 --- a/src/librustc_mir/interpret/eval_context.rs +++ b/src/librustc_mir/interpret/eval_context.rs @@ -960,7 +960,7 @@ impl<'a, 'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> EvalContext<'a, 'mir, 'tcx, M layout::Abi::Uninhabited); } } - layout::Variants::Tagged { ref discr, .. } => { + layout::Variants::Tagged { ref tag, .. } => { let discr_val = dest_ty.ty_adt_def().unwrap() .discriminant_for_variant(*self.tcx, variant_index) .val; @@ -968,12 +968,12 @@ impl<'a, 'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> EvalContext<'a, 'mir, 'tcx, M // raw discriminants for enums are isize or bigger during // their computation, but the in-memory tag is the smallest possible // representation - let size = discr.value.size(self.tcx.tcx).bits(); + let size = tag.value.size(self.tcx.tcx).bits(); let amt = 128 - size; let discr_val = (discr_val << amt) >> amt; - let (discr_dest, discr) = self.place_field(dest, mir::Field::new(0), layout)?; - self.write_primval(discr_dest, PrimVal::Bytes(discr_val), discr.ty)?; + let (discr_dest, tag) = self.place_field(dest, mir::Field::new(0), layout)?; + self.write_primval(discr_dest, PrimVal::Bytes(discr_val), tag.ty)?; } layout::Variants::NicheFilling { dataful_variant, diff --git a/src/librustc_target/abi/mod.rs b/src/librustc_target/abi/mod.rs index fd1f779f9ecc..7ae4d990c8a4 100644 --- a/src/librustc_target/abi/mod.rs +++ b/src/librustc_target/abi/mod.rs @@ -716,10 +716,10 @@ pub enum Variants { }, /// General-case enums: for each case there is a struct, and they all have - /// all space reserved for the discriminant, and their first field starts - /// at a non-0 offset, after where the discriminant would go. + /// all space reserved for the tag, and their first field starts + /// at a non-0 offset, after where the tag would go. Tagged { - discr: Scalar, + tag: Scalar, variants: Vec, }, diff --git a/src/librustc_trans/debuginfo/metadata.rs b/src/librustc_trans/debuginfo/metadata.rs index 2fc6c9d44330..f16fef5ec1e8 100644 --- a/src/librustc_trans/debuginfo/metadata.rs +++ b/src/librustc_trans/debuginfo/metadata.rs @@ -1429,8 +1429,8 @@ fn prepare_enum_metadata<'a, 'tcx>(cx: &CodegenCx<'a, 'tcx>, let discriminant_type_metadata = match layout.variants { layout::Variants::Single { .. } | layout::Variants::NicheFilling { .. } => None, - layout::Variants::Tagged { ref discr, .. } => { - Some(discriminant_type_metadata(discr.value)) + layout::Variants::Tagged { ref tag, .. } => { + Some(discriminant_type_metadata(tag.value)) } }; diff --git a/src/librustc_trans/mir/place.rs b/src/librustc_trans/mir/place.rs index 79859aee64d8..d4abd5fa88d3 100644 --- a/src/librustc_trans/mir/place.rs +++ b/src/librustc_trans/mir/place.rs @@ -273,8 +273,8 @@ impl<'a, 'tcx> PlaceRef<'tcx> { let lldiscr = discr.load(bx).immediate(); match self.layout.variants { layout::Variants::Single { .. } => bug!(), - layout::Variants::Tagged { ref discr, .. } => { - let signed = match discr.value { + layout::Variants::Tagged { ref tag, .. } => { + let signed = match tag.value { layout::Int(_, signed) => signed, _ => false };