@@ -17,7 +17,7 @@ use rustc_middle::mir::interpret::LitToConstInput;
17
17
use rustc_middle:: thir:: {
18
18
Ascription , FieldPat , LocalVarId , Pat , PatKind , PatRange , PatRangeBoundary ,
19
19
} ;
20
- use rustc_middle:: ty:: adjustment:: PatAdjust ;
20
+ use rustc_middle:: ty:: adjustment:: { PatAdjust , PatAdjustment } ;
21
21
use rustc_middle:: ty:: layout:: IntegerExt ;
22
22
use rustc_middle:: ty:: { self , CanonicalUserTypeAnnotation , Ty , TyCtxt , TypeVisitableExt } ;
23
23
use rustc_middle:: { bug, span_bug} ;
@@ -63,15 +63,15 @@ pub(super) fn pat_from_hir<'a, 'tcx>(
63
63
64
64
impl < ' a , ' tcx > PatCtxt < ' a , ' tcx > {
65
65
fn lower_pattern ( & mut self , pat : & ' tcx hir:: Pat < ' tcx > ) -> Box < Pat < ' tcx > > {
66
- let adjustments: & [ Ty < ' tcx > ] =
66
+ let adjustments: & [ PatAdjustment < ' tcx > ] =
67
67
self . typeck_results . pat_adjustments ( ) . get ( pat. hir_id ) . map_or ( & [ ] , |v| & * * v) ;
68
68
69
69
// Track the default binding mode for the Rust 2024 migration suggestion.
70
70
// Implicitly dereferencing references changes the default binding mode, but implicit deref
71
71
// patterns do not. Only track binding mode changes if a ref type is in the adjustments.
72
72
let mut opt_old_mode_span = None ;
73
73
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 ( ) )
75
75
{
76
76
opt_old_mode_span = s. visit_implicit_derefs ( pat. span , adjustments) ;
77
77
}
@@ -104,10 +104,10 @@ impl<'a, 'tcx> PatCtxt<'a, 'tcx> {
104
104
_ => self . lower_pattern_unadjusted ( pat) ,
105
105
} ;
106
106
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 ) ;
109
109
let span = thir_pat. span ;
110
- let kind = match ref_ty . pat_adjust_kind ( ) {
110
+ let kind = match adjust . kind {
111
111
PatAdjust :: BuiltinDeref => PatKind :: Deref { subpattern : thir_pat } ,
112
112
PatAdjust :: OverloadedDeref => {
113
113
let mutable = self . typeck_results . pat_has_ref_mut_binding ( pat) ;
@@ -116,11 +116,11 @@ impl<'a, 'tcx> PatCtxt<'a, 'tcx> {
116
116
PatKind :: DerefPattern { subpattern : thir_pat, mutability }
117
117
}
118
118
} ;
119
- Box :: new ( Pat { span, ty : * ref_ty , kind } )
119
+ Box :: new ( Pat { span, ty : adjust . source , kind } )
120
120
} ) ;
121
121
122
122
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 ( ) )
124
124
{
125
125
s. leave_ref ( opt_old_mode_span) ;
126
126
}
0 commit comments