@@ -15,10 +15,10 @@ use middle::pat_util::{PatIdMap, pat_id_map, pat_is_binding};
1515use middle:: pat_util:: pat_is_resolved_const;
1616use middle:: privacy:: { AllPublic , LastMod } ;
1717use middle:: subst:: Substs ;
18- use middle:: ty:: { self , Ty , HasTypeFlags } ;
18+ use middle:: ty:: { self , Ty , HasTypeFlags , LvaluePreference } ;
1919use check:: { check_expr, check_expr_has_type, check_expr_with_expectation} ;
2020use 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} ;
2222use check:: { instantiate_path, resolve_ty_and_def_ufcs, structurally_resolved_type} ;
2323use require_same_types;
2424use util:: nodemap:: FnvHashMap ;
@@ -292,7 +292,7 @@ pub fn check_pat<'a, 'tcx>(pcx: &pat_ctxt<'a, 'tcx>,
292292 let region = fcx. infcx ( ) . next_region_var ( infer:: PatternRegion ( pat. span ) ) ;
293293 tcx. mk_ref ( tcx. mk_region ( region) , ty:: TypeAndMut {
294294 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 )
296296 . unwrap_or ( hir:: MutImmutable )
297297 } )
298298 }
@@ -310,7 +310,7 @@ pub fn check_pat<'a, 'tcx>(pcx: &pat_ctxt<'a, 'tcx>,
310310 }
311311 if let Some ( ref slice) = * slice {
312312 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 )
314314 . map_or ( hir:: MutImmutable , |mt| mt. mutbl ) ;
315315
316316 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>,
399399 let tcx = pcx. fcx . ccx . tcx ;
400400 if pat_is_binding ( & tcx. def_map , inner) {
401401 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 {
403403 ty:: TyTrait ( _) => {
404404 // This is "x = SomeTrait" being reduced from
405405 // "let &x = &SomeTrait" or "let box x = Box<SomeTrait>", an error.
0 commit comments