@@ -17,7 +17,7 @@ use rustc_middle::mir::interpret::LitToConstInput;
1717use rustc_middle:: thir:: {
1818 Ascription , FieldPat , LocalVarId , Pat , PatKind , PatRange , PatRangeBoundary ,
1919} ;
20- use rustc_middle:: ty:: adjustment:: PatAdjust ;
20+ use rustc_middle:: ty:: adjustment:: { PatAdjust , PatAdjustment } ;
2121use rustc_middle:: ty:: layout:: IntegerExt ;
2222use rustc_middle:: ty:: { self , CanonicalUserTypeAnnotation , Ty , TyCtxt , TypeVisitableExt } ;
2323use rustc_middle:: { bug, span_bug} ;
@@ -63,15 +63,15 @@ pub(super) fn pat_from_hir<'a, 'tcx>(
6363
6464impl < ' a , ' tcx > PatCtxt < ' a , ' tcx > {
6565 fn lower_pattern ( & mut self , pat : & ' tcx hir:: Pat < ' tcx > ) -> Box < Pat < ' tcx > > {
66- let adjustments: & [ Ty < ' tcx > ] =
66+ let adjustments: & [ PatAdjustment < ' tcx > ] =
6767 self . typeck_results . pat_adjustments ( ) . get ( pat. hir_id ) . map_or ( & [ ] , |v| & * * v) ;
6868
6969 // Track the default binding mode for the Rust 2024 migration suggestion.
7070 // Implicitly dereferencing references changes the default binding mode, but implicit deref
7171 // patterns do not. Only track binding mode changes if a ref type is in the adjustments.
7272 let mut opt_old_mode_span = None ;
7373 if let Some ( s) = & mut self . rust_2024_migration
74- && adjustments. iter ( ) . any ( |ty| ty . is_ref ( ) )
74+ && adjustments. iter ( ) . any ( |adjust| adjust . source . is_ref ( ) )
7575 {
7676 opt_old_mode_span = s. visit_implicit_derefs ( pat. span , adjustments) ;
7777 }
@@ -104,10 +104,10 @@ impl<'a, 'tcx> PatCtxt<'a, 'tcx> {
104104 _ => self . lower_pattern_unadjusted ( pat) ,
105105 } ;
106106
107- let adjusted_pat = adjustments. iter ( ) . rev ( ) . fold ( unadjusted_pat, |thir_pat, ref_ty | {
108- debug ! ( "{:?}: wrapping pattern with type {:?}" , thir_pat, ref_ty ) ;
107+ let adjusted_pat = adjustments. iter ( ) . rev ( ) . fold ( unadjusted_pat, |thir_pat, adjust | {
108+ debug ! ( "{:?}: wrapping pattern with adjustment {:?}" , thir_pat, adjust ) ;
109109 let span = thir_pat. span ;
110- let kind = match ref_ty . pat_adjust_kind ( ) {
110+ let kind = match adjust . kind {
111111 PatAdjust :: BuiltinDeref => PatKind :: Deref { subpattern : thir_pat } ,
112112 PatAdjust :: OverloadedDeref => {
113113 let mutable = self . typeck_results . pat_has_ref_mut_binding ( pat) ;
@@ -116,11 +116,11 @@ impl<'a, 'tcx> PatCtxt<'a, 'tcx> {
116116 PatKind :: DerefPattern { subpattern : thir_pat, mutability }
117117 }
118118 } ;
119- Box :: new ( Pat { span, ty : * ref_ty , kind } )
119+ Box :: new ( Pat { span, ty : adjust . source , kind } )
120120 } ) ;
121121
122122 if let Some ( s) = & mut self . rust_2024_migration
123- && adjustments. iter ( ) . any ( |ty| ty . is_ref ( ) )
123+ && adjustments. iter ( ) . any ( |adjust| adjust . source . is_ref ( ) )
124124 {
125125 s. leave_ref ( opt_old_mode_span) ;
126126 }
0 commit comments