diff options
| author | Aaron Hill <aa1ronham@gmail.com> | 2021-07-20 10:56:33 -0500 |
|---|---|---|
| committer | Aaron Hill <aa1ronham@gmail.com> | 2021-07-22 10:22:00 -0500 |
| commit | 0ebd6e489150ce79bee339ff713078bf6eff2eae (patch) | |
| tree | b80da0796e1b53d51688b7cdc8db7e9d8b37710a /compiler | |
| parent | f913a4fe901d6aeb84941fa06c17916d4e6d1dd7 (diff) | |
| download | rust-0ebd6e489150ce79bee339ff713078bf6eff2eae.tar.gz rust-0ebd6e489150ce79bee339ff713078bf6eff2eae.zip | |
Extend HIR WF checking to fields
Diffstat (limited to 'compiler')
| -rw-r--r-- | compiler/rustc_typeck/src/check/wfcheck.rs | 9 | ||||
| -rw-r--r-- | compiler/rustc_typeck/src/hir_wf_check.rs | 3 |
2 files changed, 7 insertions, 5 deletions
diff --git a/compiler/rustc_typeck/src/check/wfcheck.rs b/compiler/rustc_typeck/src/check/wfcheck.rs index 98980c65bc8..e33cc603b5e 100644 --- a/compiler/rustc_typeck/src/check/wfcheck.rs +++ b/compiler/rustc_typeck/src/check/wfcheck.rs @@ -523,8 +523,7 @@ fn check_type_defn<'tcx, F>( fcx.register_wf_obligation( field.ty.into(), field.span, - // We don't have an HIR id for the field - ObligationCauseCode::WellFormed(None), + ObligationCauseCode::WellFormed(Some(WellFormedLoc::Ty(field.def_id))), ) } @@ -1467,6 +1466,7 @@ struct AdtVariant<'tcx> { struct AdtField<'tcx> { ty: Ty<'tcx>, + def_id: LocalDefId, span: Span, } @@ -1477,11 +1477,12 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { .fields() .iter() .map(|field| { - let field_ty = self.tcx.type_of(self.tcx.hir().local_def_id(field.hir_id)); + let def_id = self.tcx.hir().local_def_id(field.hir_id); + let field_ty = self.tcx.type_of(def_id); let field_ty = self.normalize_associated_types_in(field.ty.span, field_ty); let field_ty = self.resolve_vars_if_possible(field_ty); debug!("non_enum_variant: type of field {:?} is {:?}", field, field_ty); - AdtField { ty: field_ty, span: field.ty.span } + AdtField { ty: field_ty, span: field.ty.span, def_id } }) .collect(); AdtVariant { fields, explicit_discr: None } diff --git a/compiler/rustc_typeck/src/hir_wf_check.rs b/compiler/rustc_typeck/src/hir_wf_check.rs index c1af10f5ce4..e7503d3d71c 100644 --- a/compiler/rustc_typeck/src/hir_wf_check.rs +++ b/compiler/rustc_typeck/src/hir_wf_check.rs @@ -25,7 +25,7 @@ fn diagnostic_hir_wf_check<'tcx>( WellFormedLoc::Ty(def_id) => def_id, WellFormedLoc::Param { function, param_idx: _ } => function, }; - let hir_id = HirId::make_owner(def_id); + let hir_id = hir.local_def_id_to_hir_id(def_id); // HIR wfcheck should only ever happen as part of improving an existing error tcx.sess @@ -140,6 +140,7 @@ fn diagnostic_hir_wf_check<'tcx>( } ref item => bug!("Unexpected item {:?}", item), }, + hir::Node::Field(field) => Some(field.ty), ref node => bug!("Unexpected node {:?}", node), }, WellFormedLoc::Param { function: _, param_idx } => { |
