@@ -15,10 +15,10 @@ use middle::pat_util::{PatIdMap, pat_id_map, pat_is_binding};
15
15
use middle:: pat_util:: pat_is_resolved_const;
16
16
use middle:: privacy:: { AllPublic , LastMod } ;
17
17
use middle:: subst:: Substs ;
18
- use middle:: ty:: { self , Ty , HasTypeFlags } ;
18
+ use middle:: ty:: { self , Ty , HasTypeFlags , LvaluePreference } ;
19
19
use check:: { check_expr, check_expr_has_type, check_expr_with_expectation} ;
20
20
use check:: { check_expr_coercable_to_type, demand, FnCtxt , Expectation } ;
21
- use check:: { check_expr_with_lvalue_pref, LvaluePreference } ;
21
+ use check:: { check_expr_with_lvalue_pref} ;
22
22
use check:: { instantiate_path, resolve_ty_and_def_ufcs, structurally_resolved_type} ;
23
23
use require_same_types;
24
24
use util:: nodemap:: FnvHashMap ;
@@ -292,7 +292,7 @@ pub fn check_pat<'a, 'tcx>(pcx: &pat_ctxt<'a, 'tcx>,
292
292
let region = fcx. infcx ( ) . next_region_var ( infer:: PatternRegion ( pat. span ) ) ;
293
293
tcx. mk_ref ( tcx. mk_region ( region) , ty:: TypeAndMut {
294
294
ty : tcx. mk_slice ( inner_ty) ,
295
- mutbl : expected_ty. builtin_deref ( true ) . map ( |mt| mt. mutbl )
295
+ mutbl : expected_ty. builtin_deref ( true , ty :: NoPreference ) . map ( |mt| mt. mutbl )
296
296
. unwrap_or ( hir:: MutImmutable )
297
297
} )
298
298
}
@@ -310,7 +310,7 @@ pub fn check_pat<'a, 'tcx>(pcx: &pat_ctxt<'a, 'tcx>,
310
310
}
311
311
if let Some ( ref slice) = * slice {
312
312
let region = fcx. infcx ( ) . next_region_var ( infer:: PatternRegion ( pat. span ) ) ;
313
- let mutbl = expected_ty. builtin_deref ( true )
313
+ let mutbl = expected_ty. builtin_deref ( true , ty :: NoPreference )
314
314
. map_or ( hir:: MutImmutable , |mt| mt. mutbl ) ;
315
315
316
316
let slice_ty = tcx. mk_ref ( tcx. mk_region ( region) , ty:: TypeAndMut {
@@ -399,7 +399,7 @@ pub fn check_dereferencable<'a, 'tcx>(pcx: &pat_ctxt<'a, 'tcx>,
399
399
let tcx = pcx. fcx . ccx . tcx ;
400
400
if pat_is_binding ( & tcx. def_map , inner) {
401
401
let expected = fcx. infcx ( ) . shallow_resolve ( expected) ;
402
- expected. builtin_deref ( true ) . map_or ( true , |mt| match mt. ty . sty {
402
+ expected. builtin_deref ( true , ty :: NoPreference ) . map_or ( true , |mt| match mt. ty . sty {
403
403
ty:: TyTrait ( _) => {
404
404
// This is "x = SomeTrait" being reduced from
405
405
// "let &x = &SomeTrait" or "let box x = Box<SomeTrait>", an error.
0 commit comments