@@ -504,6 +504,8 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
504504 TupleMatchFound :: Single => {
505505 let expected_ty = expected_input_tys[ 0 ] ;
506506 let provided_ty = final_arg_types[ 0 ] . map ( |ty| ty. 0 ) . unwrap ( ) ;
507+ let expected_ty = self . resolve_vars_if_possible ( expected_ty) ;
508+ let provided_ty = self . resolve_vars_if_possible ( provided_ty) ;
507509 let cause = & self . misc ( provided_args[ 0 ] . span ) ;
508510 let compatibility = demand_compatible ( 0 , & mut final_arg_types) ;
509511 let type_error = match compatibility {
@@ -565,6 +567,8 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
565567 {
566568 let expected_ty = expected_input_tys[ * input_idx] ;
567569 let provided_ty = final_arg_types[ * input_idx] . map ( |ty| ty. 0 ) . unwrap ( ) ;
570+ let expected_ty = self . resolve_vars_if_possible ( expected_ty) ;
571+ let provided_ty = self . resolve_vars_if_possible ( provided_ty) ;
568572 let cause = & self . misc ( provided_args[ * input_idx] . span ) ;
569573 let trace = TypeTrace :: types ( cause, true , expected_ty, provided_ty) ;
570574 let mut err = self . report_and_explain_type_error ( trace, error) ;
@@ -634,6 +638,8 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
634638 . and_then ( |x| x. as_ref ( ) )
635639 . map ( |ty| ty. 0 )
636640 . unwrap_or ( tcx. ty_error ( ) ) ;
641+ let expected_ty = self . resolve_vars_if_possible ( expected_ty) ;
642+ let provided_ty = self . resolve_vars_if_possible ( provided_ty) ;
637643 if let Compatibility :: Incompatible ( error) = & compatibility {
638644 let cause = & self . misc (
639645 provided_args. get ( input_idx) . map ( |i| i. span ) . unwrap_or ( call_span) ,
0 commit comments