diff options
| author | Nicholas Nethercote <n.nethercote@gmail.com> | 2022-03-05 07:28:41 +1100 |
|---|---|---|
| committer | Nicholas Nethercote <n.nethercote@gmail.com> | 2022-03-11 13:31:24 +1100 |
| commit | ca5525d5643f4eb7de5c5e69d0691fc8f1cacfca (patch) | |
| tree | cbe3682d3e3ff0d1a48b76f972f0322ea28c9542 /compiler/rustc_mir_build | |
| parent | 5f4e0677190b82e61dc507e3e72caf89da8e5e28 (diff) | |
| download | rust-ca5525d5643f4eb7de5c5e69d0691fc8f1cacfca.tar.gz rust-ca5525d5643f4eb7de5c5e69d0691fc8f1cacfca.zip | |
Improve `AdtDef` interning.
This commit makes `AdtDef` use `Interned`. Much the commit is tedious changes to introduce getter functions. The interesting changes are in `compiler/rustc_middle/src/ty/adt.rs`.
Diffstat (limited to 'compiler/rustc_mir_build')
13 files changed, 53 insertions, 55 deletions
diff --git a/compiler/rustc_mir_build/src/build/expr/as_place.rs b/compiler/rustc_mir_build/src/build/expr/as_place.rs index 389f711099b..3b93d127d2c 100644 --- a/compiler/rustc_mir_build/src/build/expr/as_place.rs +++ b/compiler/rustc_mir_build/src/build/expr/as_place.rs @@ -334,8 +334,8 @@ impl<'tcx> PlaceBuilder<'tcx> { self.project(PlaceElem::Deref) } - crate fn downcast(self, adt_def: &'tcx AdtDef, variant_index: VariantIdx) -> Self { - self.project(PlaceElem::Downcast(Some(adt_def.variants[variant_index].name), variant_index)) + crate fn downcast(self, adt_def: AdtDef<'tcx>, variant_index: VariantIdx) -> Self { + self.project(PlaceElem::Downcast(Some(adt_def.variant(variant_index).name), variant_index)) } fn index(self, index: Local) -> Self { diff --git a/compiler/rustc_mir_build/src/build/expr/into.rs b/compiler/rustc_mir_build/src/build/expr/into.rs index 9c7c7203f47..8092f999311 100644 --- a/compiler/rustc_mir_build/src/build/expr/into.rs +++ b/compiler/rustc_mir_build/src/build/expr/into.rs @@ -332,7 +332,7 @@ impl<'a, 'tcx> Builder<'a, 'tcx> { .collect(); let field_names: Vec<_> = - (0..adt_def.variants[variant_index].fields.len()).map(Field::new).collect(); + (0..adt_def.variant(variant_index).fields.len()).map(Field::new).collect(); let fields: Vec<_> = if let Some(FruInfo { base, field_types }) = base { let place_builder = @@ -367,7 +367,7 @@ impl<'a, 'tcx> Builder<'a, 'tcx> { }) }); let adt = Box::new(AggregateKind::Adt( - adt_def.did, + adt_def.did(), variant_index, substs, user_ty, diff --git a/compiler/rustc_mir_build/src/build/matches/mod.rs b/compiler/rustc_mir_build/src/build/matches/mod.rs index 44fe93ba363..c724e3e1b8f 100644 --- a/compiler/rustc_mir_build/src/build/matches/mod.rs +++ b/compiler/rustc_mir_build/src/build/matches/mod.rs @@ -946,7 +946,7 @@ enum TestKind<'tcx> { /// Test what enum variant a value is. Switch { /// The enum type being tested. - adt_def: &'tcx ty::AdtDef, + adt_def: ty::AdtDef<'tcx>, /// The set of variants that we should create a branch for. We also /// create an additional "otherwise" case. variants: BitSet<VariantIdx>, diff --git a/compiler/rustc_mir_build/src/build/matches/simplify.rs b/compiler/rustc_mir_build/src/build/matches/simplify.rs index 4f9a2c0ce77..7f53d9dd705 100644 --- a/compiler/rustc_mir_build/src/build/matches/simplify.rs +++ b/compiler/rustc_mir_build/src/build/matches/simplify.rs @@ -264,7 +264,7 @@ impl<'a, 'tcx> Builder<'a, 'tcx> { } PatKind::Variant { adt_def, substs, variant_index, ref subpatterns } => { - let irrefutable = adt_def.variants.iter_enumerated().all(|(i, v)| { + let irrefutable = adt_def.variants().iter_enumerated().all(|(i, v)| { i == variant_index || { self.tcx.features().exhaustive_patterns && !v @@ -276,7 +276,7 @@ impl<'a, 'tcx> Builder<'a, 'tcx> { ) .is_empty() } - }) && (adt_def.did.is_local() + }) && (adt_def.did().is_local() || !adt_def.is_variant_list_non_exhaustive()); if irrefutable { let place_builder = match_pair.place.downcast(adt_def, variant_index); diff --git a/compiler/rustc_mir_build/src/build/matches/test.rs b/compiler/rustc_mir_build/src/build/matches/test.rs index da9c4b930df..96069f05b40 100644 --- a/compiler/rustc_mir_build/src/build/matches/test.rs +++ b/compiler/rustc_mir_build/src/build/matches/test.rs @@ -30,11 +30,11 @@ impl<'a, 'tcx> Builder<'a, 'tcx> { /// It is a bug to call this with a not-fully-simplified pattern. pub(super) fn test<'pat>(&mut self, match_pair: &MatchPair<'pat, 'tcx>) -> Test<'tcx> { match *match_pair.pattern.kind { - PatKind::Variant { ref adt_def, substs: _, variant_index: _, subpatterns: _ } => Test { + PatKind::Variant { adt_def, substs: _, variant_index: _, subpatterns: _ } => Test { span: match_pair.pattern.span, kind: TestKind::Switch { adt_def, - variants: BitSet::new_empty(adt_def.variants.len()), + variants: BitSet::new_empty(adt_def.variants().len()), }, }, @@ -174,7 +174,7 @@ impl<'a, 'tcx> Builder<'a, 'tcx> { TestKind::Switch { adt_def, ref variants } => { let target_blocks = make_target_blocks(self); // Variants is a BitVec of indexes into adt_def.variants. - let num_enum_variants = adt_def.variants.len(); + let num_enum_variants = adt_def.variants().len(); debug_assert_eq!(target_blocks.len(), num_enum_variants + 1); let otherwise_block = *target_blocks.last().unwrap(); let tcx = self.tcx; @@ -201,7 +201,7 @@ impl<'a, 'tcx> Builder<'a, 'tcx> { otherwise_block, ); debug!("num_enum_variants: {}, variants: {:?}", num_enum_variants, variants); - let discr_ty = adt_def.repr.discr_type().to_ty(tcx); + let discr_ty = adt_def.repr().discr_type().to_ty(tcx); let discr = self.temp(discr_ty, test.span); self.cfg.push_assign( block, @@ -733,7 +733,7 @@ impl<'a, 'tcx> Builder<'a, 'tcx> { fn candidate_after_variant_switch<'pat>( &mut self, match_pair_index: usize, - adt_def: &'tcx ty::AdtDef, + adt_def: ty::AdtDef<'tcx>, variant_index: VariantIdx, subpatterns: &'pat [FieldPat<'tcx>], candidate: &mut Candidate<'pat, 'tcx>, @@ -744,7 +744,7 @@ impl<'a, 'tcx> Builder<'a, 'tcx> { // we want to create a set of derived match-patterns like // `(x as Variant).0 @ P1` and `(x as Variant).1 @ P1`. let elem = - ProjectionElem::Downcast(Some(adt_def.variants[variant_index].name), variant_index); + ProjectionElem::Downcast(Some(adt_def.variant(variant_index).name), variant_index); let downcast_place = match_pair.place.project(elem); // `(x as Variant)` let consequent_match_pairs = subpatterns.iter().map(|subpattern| { // e.g., `(x as Variant).0` @@ -798,7 +798,7 @@ impl Test<'_> { // variants, we have a target for each variant and the // otherwise case, and we make sure that all of the cases not // specified have the same block. - adt_def.variants.len() + 1 + adt_def.variants().len() + 1 } TestKind::SwitchInt { switch_ty, ref options, .. } => { if switch_ty.is_bool() { diff --git a/compiler/rustc_mir_build/src/check_unsafety.rs b/compiler/rustc_mir_build/src/check_unsafety.rs index b40d3e453e9..2d1198edbc3 100644 --- a/compiler/rustc_mir_build/src/check_unsafety.rs +++ b/compiler/rustc_mir_build/src/check_unsafety.rs @@ -162,7 +162,7 @@ impl<'a, 'tcx> Visitor<'a, 'tcx> for LayoutConstrainedPlaceVisitor<'a, 'tcx> { ExprKind::Field { lhs, .. } => { if let ty::Adt(adt_def, _) = self.thir[lhs].ty.kind() { if (Bound::Unbounded, Bound::Unbounded) - != self.tcx.layout_scalar_valid_range(adt_def.did) + != self.tcx.layout_scalar_valid_range(adt_def.did()) { self.found = true; } @@ -242,7 +242,7 @@ impl<'a, 'tcx> Visitor<'a, 'tcx> for UnsafetyVisitor<'a, 'tcx> { visit::walk_pat(self, pat); self.in_union_destructure = old_in_union_destructure; } else if (Bound::Unbounded, Bound::Unbounded) - != self.tcx.layout_scalar_valid_range(adt_def.did) + != self.tcx.layout_scalar_valid_range(adt_def.did()) { let old_inside_adt = std::mem::replace(&mut self.inside_adt, true); visit::walk_pat(self, pat); @@ -386,7 +386,7 @@ impl<'a, 'tcx> Visitor<'a, 'tcx> for UnsafetyVisitor<'a, 'tcx> { user_ty: _, fields: _, base: _, - }) => match self.tcx.layout_scalar_valid_range(adt_def.did) { + }) => match self.tcx.layout_scalar_valid_range(adt_def.did()) { (Bound::Unbounded, Bound::Unbounded) => {} _ => self.requires_unsafe(expr.span, InitializingTypeWith), }, diff --git a/compiler/rustc_mir_build/src/thir/cx/expr.rs b/compiler/rustc_mir_build/src/thir/cx/expr.rs index dc11c76e07b..23ee982489d 100644 --- a/compiler/rustc_mir_build/src/thir/cx/expr.rs +++ b/compiler/rustc_mir_build/src/thir/cx/expr.rs @@ -228,7 +228,7 @@ impl<'tcx> Cx<'tcx> { let user_ty = user_provided_types.get(fun.hir_id).copied().map(|mut u_ty| { if let UserType::TypeOf(ref mut did, _) = &mut u_ty.value { - *did = adt_def.did; + *did = adt_def.did(); } u_ty }); @@ -376,7 +376,7 @@ impl<'tcx> Cx<'tcx> { let user_ty = user_provided_types.get(expr.hir_id).copied(); debug!("make_mirror_unadjusted: (struct/union) user_ty={:?}", user_ty); ExprKind::Adt(Box::new(Adt { - adt_def: adt, + adt_def: *adt, variant_index: VariantIdx::new(0), substs, user_ty, @@ -402,7 +402,7 @@ impl<'tcx> Cx<'tcx> { let user_ty = user_provided_types.get(expr.hir_id).copied(); debug!("make_mirror_unadjusted: (variant) user_ty={:?}", user_ty); ExprKind::Adt(Box::new(Adt { - adt_def: adt, + adt_def: *adt, variant_index: index, substs, user_ty, @@ -680,7 +680,7 @@ impl<'tcx> Cx<'tcx> { let idx = adt_def.variant_index_with_ctor_id(variant_ctor_id); let (d, o) = adt_def.discriminant_def_for_variant(idx); use rustc_middle::ty::util::IntTypeExt; - let ty = adt_def.repr.discr_type(); + let ty = adt_def.repr().discr_type(); let ty = ty.to_ty(self.tcx()); Some((d, o, ty)) } @@ -924,7 +924,7 @@ impl<'tcx> Cx<'tcx> { // A unit struct/variant which is used as a value. // We return a completely different ExprKind here to account for this special case. ty::Adt(adt_def, substs) => ExprKind::Adt(Box::new(Adt { - adt_def, + adt_def: *adt_def, variant_index: adt_def.variant_index_with_ctor_id(def_id), substs, user_ty: user_provided_type, diff --git a/compiler/rustc_mir_build/src/thir/pattern/check_match.rs b/compiler/rustc_mir_build/src/thir/pattern/check_match.rs index c94da838680..e2c56df6014 100644 --- a/compiler/rustc_mir_build/src/thir/pattern/check_match.rs +++ b/compiler/rustc_mir_build/src/thir/pattern/check_match.rs @@ -395,17 +395,17 @@ fn check_for_bindings_named_same_as_variants( && let pat_ty = cx.typeck_results.pat_ty(p).peel_refs() && let ty::Adt(edef, _) = pat_ty.kind() && edef.is_enum() - && edef.variants.iter().any(|variant| { + && edef.variants().iter().any(|variant| { variant.ident(cx.tcx) == ident && variant.ctor_kind == CtorKind::Const }) { - let variant_count = edef.variants.len(); + let variant_count = edef.variants().len(); cx.tcx.struct_span_lint_hir( BINDINGS_WITH_VARIANT_NAME, p.hir_id, p.span, |lint| { - let ty_path = cx.tcx.def_path_str(edef.did); + let ty_path = cx.tcx.def_path_str(edef.did()); let mut err = lint.build(&format!( "pattern binding `{}` is named the same as one \ of the variants of the type `{}`", @@ -573,7 +573,7 @@ fn non_exhaustive_match<'p, 'tcx>( ) { let is_empty_match = arms.is_empty(); let non_empty_enum = match scrut_ty.kind() { - ty::Adt(def, _) => def.is_enum() && !def.variants.is_empty(), + ty::Adt(def, _) => def.is_enum() && !def.variants().is_empty(), _ => false, }; // In the case of an empty match, replace the '`_` not covered' diagnostic with something more @@ -609,7 +609,7 @@ fn non_exhaustive_match<'p, 'tcx>( }; let is_variant_list_non_exhaustive = match scrut_ty.kind() { - ty::Adt(def, _) if def.is_variant_list_non_exhaustive() && !def.did.is_local() => true, + ty::Adt(def, _) if def.is_variant_list_non_exhaustive() && !def.did().is_local() => true, _ => false, }; @@ -762,17 +762,17 @@ fn adt_defined_here<'p, 'tcx>( if let ty::Adt(def, _) = ty.kind() { let mut spans = vec![]; if witnesses.len() < 5 { - for sp in maybe_point_at_variant(cx, def, witnesses.iter()) { + for sp in maybe_point_at_variant(cx, *def, witnesses.iter()) { spans.push(sp); } } let def_span = cx .tcx .hir() - .get_if_local(def.did) + .get_if_local(def.did()) .and_then(|node| node.ident()) .map(|ident| ident.span) - .unwrap_or_else(|| cx.tcx.def_span(def.did)); + .unwrap_or_else(|| cx.tcx.def_span(def.did())); let mut span: MultiSpan = if spans.is_empty() { def_span.into() } else { spans.clone().into() }; @@ -786,17 +786,17 @@ fn adt_defined_here<'p, 'tcx>( fn maybe_point_at_variant<'a, 'p: 'a, 'tcx: 'a>( cx: &MatchCheckCtxt<'p, 'tcx>, - def: &AdtDef, + def: AdtDef<'tcx>, patterns: impl Iterator<Item = &'a DeconstructedPat<'p, 'tcx>>, ) -> Vec<Span> { use Constructor::*; let mut covered = vec![]; for pattern in patterns { if let Variant(variant_index) = pattern.ctor() { - if let ty::Adt(this_def, _) = pattern.ty().kind() && this_def.did != def.did { + if let ty::Adt(this_def, _) = pattern.ty().kind() && this_def.did() != def.did() { continue; } - let sp = def.variants[*variant_index].ident(cx.tcx).span; + let sp = def.variant(*variant_index).ident(cx.tcx).span; if covered.contains(&sp) { // Don't point at variants that have already been covered due to other patterns to avoid // visual clutter. diff --git a/compiler/rustc_mir_build/src/thir/pattern/const_to_pat.rs b/compiler/rustc_mir_build/src/thir/pattern/const_to_pat.rs index b83cbb753df..ae9b44cee4b 100644 --- a/compiler/rustc_mir_build/src/thir/pattern/const_to_pat.rs +++ b/compiler/rustc_mir_build/src/thir/pattern/const_to_pat.rs @@ -110,8 +110,8 @@ impl<'a, 'tcx> ConstToPat<'a, 'tcx> { self.infcx.tcx } - fn adt_derive_msg(&self, adt_def: &AdtDef) -> String { - let path = self.tcx().def_path_str(adt_def.did); + fn adt_derive_msg(&self, adt_def: AdtDef<'tcx>) -> String { + let path = self.tcx().def_path_str(adt_def.did()); format!( "to use a constant of type `{}` in a pattern, \ `{}` must be annotated with `#[derive(PartialEq, Eq)]`", @@ -346,7 +346,7 @@ impl<'a, 'tcx> ConstToPat<'a, 'tcx> { adt_def, cv.ty() ); - let path = tcx.def_path_str(adt_def.did); + let path = tcx.def_path_str(adt_def.did()); let msg = format!( "to use a constant of type `{}` in a pattern, \ `{}` must be annotated with `#[derive(PartialEq, Eq)]`", @@ -363,7 +363,7 @@ impl<'a, 'tcx> ConstToPat<'a, 'tcx> { ty::Adt(adt_def, substs) if adt_def.is_enum() => { let destructured = tcx.destructure_const(param_env.and(cv)); PatKind::Variant { - adt_def, + adt_def: *adt_def, substs, variant_index: destructured .variant diff --git a/compiler/rustc_mir_build/src/thir/pattern/deconstruct_pat.rs b/compiler/rustc_mir_build/src/thir/pattern/deconstruct_pat.rs index 002c0b5f7d8..61f1069d571 100644 --- a/compiler/rustc_mir_build/src/thir/pattern/deconstruct_pat.rs +++ b/compiler/rustc_mir_build/src/thir/pattern/deconstruct_pat.rs @@ -681,7 +681,7 @@ impl<'tcx> Constructor<'tcx> { /// This means that the variant has a stdlib unstable feature marking it. pub(super) fn is_unstable_variant(&self, pcx: PatCtxt<'_, '_, 'tcx>) -> bool { if let Constructor::Variant(idx) = self && let ty::Adt(adt, _) = pcx.ty.kind() { - let variant_def_id = adt.variants[*idx].def_id; + let variant_def_id = adt.variant(*idx).def_id; // Filter variants that depend on a disabled unstable feature. return matches!( pcx.cx.tcx.eval_stability(variant_def_id, None, DUMMY_SP, None), @@ -695,13 +695,13 @@ impl<'tcx> Constructor<'tcx> { /// attribute. pub(super) fn is_doc_hidden_variant(&self, pcx: PatCtxt<'_, '_, 'tcx>) -> bool { if let Constructor::Variant(idx) = self && let ty::Adt(adt, _) = pcx.ty.kind() { - let variant_def_id = adt.variants[*idx].def_id; + let variant_def_id = adt.variant(*idx).def_id; return pcx.cx.tcx.is_doc_hidden(variant_def_id); } false } - fn variant_index_for_adt(&self, adt: &'tcx ty::AdtDef) -> VariantIdx { + fn variant_index_for_adt(&self, adt: ty::AdtDef<'tcx>) -> VariantIdx { match *self { Variant(idx) => idx, Single => { @@ -725,7 +725,7 @@ impl<'tcx> Constructor<'tcx> { // patterns. If we're here we can assume this is a box pattern. 1 } else { - let variant = &adt.variants[self.variant_index_for_adt(adt)]; + let variant = &adt.variant(self.variant_index_for_adt(*adt)); Fields::list_variant_nonhidden_fields(pcx.cx, pcx.ty, variant).count() } } @@ -973,10 +973,10 @@ impl<'tcx> SplitWildcard<'tcx> { // exception is if the pattern is at the top level, because we want empty matches to be // considered exhaustive. let is_secretly_empty = - def.variants.is_empty() && !is_exhaustive_pat_feature && !pcx.is_top_level; + def.variants().is_empty() && !is_exhaustive_pat_feature && !pcx.is_top_level; let mut ctors: SmallVec<[_; 1]> = def - .variants + .variants() .iter_enumerated() .filter(|(_, v)| { // If `exhaustive_patterns` is enabled, we exclude variants known to be @@ -1179,7 +1179,7 @@ impl<'p, 'tcx> Fields<'p, 'tcx> { ) -> impl Iterator<Item = (Field, Ty<'tcx>)> + Captures<'a> + Captures<'p> { let ty::Adt(adt, substs) = ty.kind() else { bug!() }; // Whether we must not match the fields of this variant exhaustively. - let is_non_exhaustive = variant.is_field_list_non_exhaustive() && !adt.did.is_local(); + let is_non_exhaustive = variant.is_field_list_non_exhaustive() && !adt.did().is_local(); variant.fields.iter().enumerate().filter_map(move |(i, field)| { let ty = field.ty(cx.tcx, substs); @@ -1213,7 +1213,7 @@ impl<'p, 'tcx> Fields<'p, 'tcx> { // patterns. If we're here we can assume this is a box pattern. Fields::wildcards_from_tys(cx, once(substs.type_at(0))) } else { - let variant = &adt.variants[constructor.variant_index_for_adt(adt)]; + let variant = &adt.variant(constructor.variant_index_for_adt(*adt)); let tys = Fields::list_variant_nonhidden_fields(cx, ty, variant) .map(|(_, ty)| ty); Fields::wildcards_from_tys(cx, tys) @@ -1346,7 +1346,7 @@ impl<'p, 'tcx> DeconstructedPat<'p, 'tcx> { PatKind::Variant { variant_index, .. } => Variant(*variant_index), _ => bug!(), }; - let variant = &adt.variants[ctor.variant_index_for_adt(adt)]; + let variant = &adt.variant(ctor.variant_index_for_adt(*adt)); // For each field in the variant, we store the relevant index into `self.fields` if any. let mut field_id_to_id: Vec<Option<usize>> = (0..variant.fields.len()).map(|_| None).collect(); @@ -1459,15 +1459,15 @@ impl<'p, 'tcx> DeconstructedPat<'p, 'tcx> { PatKind::Deref { subpattern: subpatterns.next().unwrap() } } ty::Adt(adt_def, substs) => { - let variant_index = self.ctor.variant_index_for_adt(adt_def); - let variant = &adt_def.variants[variant_index]; + let variant_index = self.ctor.variant_index_for_adt(*adt_def); + let variant = &adt_def.variant(variant_index); let subpatterns = Fields::list_variant_nonhidden_fields(cx, self.ty, variant) .zip(subpatterns) .map(|((field, _ty), pattern)| FieldPat { field, pattern }) .collect(); if adt_def.is_enum() { - PatKind::Variant { adt_def, substs, variant_index, subpatterns } + PatKind::Variant { adt_def: *adt_def, substs, variant_index, subpatterns } } else { PatKind::Leaf { subpatterns } } @@ -1640,9 +1640,7 @@ impl<'p, 'tcx> fmt::Debug for DeconstructedPat<'p, 'tcx> { } ty::Adt(..) | ty::Tuple(..) => { let variant = match self.ty.kind() { - ty::Adt(adt, _) => { - Some(&adt.variants[self.ctor.variant_index_for_adt(adt)]) - } + ty::Adt(adt, _) => Some(adt.variant(self.ctor.variant_index_for_adt(*adt))), ty::Tuple(_) => None, _ => unreachable!(), }; diff --git a/compiler/rustc_mir_build/src/thir/pattern/mod.rs b/compiler/rustc_mir_build/src/thir/pattern/mod.rs index 6282b07e6f0..d21fbb9edff 100644 --- a/compiler/rustc_mir_build/src/thir/pattern/mod.rs +++ b/compiler/rustc_mir_build/src/thir/pattern/mod.rs @@ -653,7 +653,7 @@ macro_rules! CloneImpls { CloneImpls! { <'tcx> Span, Field, Mutability, Symbol, hir::HirId, usize, ty::Const<'tcx>, - Region<'tcx>, Ty<'tcx>, BindingMode, &'tcx AdtDef, + Region<'tcx>, Ty<'tcx>, BindingMode, AdtDef<'tcx>, SubstsRef<'tcx>, &'tcx GenericArg<'tcx>, UserType<'tcx>, UserTypeProjection, PatTyProj<'tcx> } diff --git a/compiler/rustc_mir_build/src/thir/pattern/usefulness.rs b/compiler/rustc_mir_build/src/thir/pattern/usefulness.rs index 286473c38e3..176723ab28b 100644 --- a/compiler/rustc_mir_build/src/thir/pattern/usefulness.rs +++ b/compiler/rustc_mir_build/src/thir/pattern/usefulness.rs @@ -325,7 +325,7 @@ impl<'a, 'tcx> MatchCheckCtxt<'a, 'tcx> { pub(super) fn is_foreign_non_exhaustive_enum(&self, ty: Ty<'tcx>) -> bool { match ty.kind() { ty::Adt(def, ..) => { - def.is_enum() && def.is_variant_list_non_exhaustive() && !def.did.is_local() + def.is_enum() && def.is_variant_list_non_exhaustive() && !def.did().is_local() } _ => false, } diff --git a/compiler/rustc_mir_build/src/thir/util.rs b/compiler/rustc_mir_build/src/thir/util.rs index aea8667314f..82f97f22cce 100644 --- a/compiler/rustc_mir_build/src/thir/util.rs +++ b/compiler/rustc_mir_build/src/thir/util.rs @@ -20,7 +20,7 @@ crate trait UserAnnotatedTyHelpers<'tcx> { match ty.kind() { ty::Adt(adt_def, ..) => { if let UserType::TypeOf(ref mut did, _) = &mut user_ty.value { - *did = adt_def.did; + *did = adt_def.did(); } Some(user_ty) } |
