@@ -1079,15 +1079,23 @@ impl<'a, 'gcx, 'tcx> InferCtxt<'a, 'gcx, 'tcx> {
10791079 node : hir:: ExprClosure ( _, _, _, closure_span, false ) ,
10801080 ..
10811081 } ) => {
1082- let sp = var_origin. span ( ) ;
1082+ let sup_sp = sup_origin. span ( ) ;
1083+ let origin_sp = var_origin. span ( ) ;
10831084 let mut err = self . tcx . sess . struct_span_err (
1084- sp ,
1085+ sup_sp ,
10851086 "borrowed data cannot be moved outside of its closure" ) ;
1086- err. span_label ( sp, "cannot be moved outside of its closure" ) ;
1087- err. span_label ( * external_span,
1088- "borrowed data cannot be moved into here..." ) ;
1089- err. span_label ( * closure_span,
1090- "...because it cannot outlive this closure" ) ;
1087+ err. span_label ( sup_sp, "cannot be moved outside of its closure" ) ;
1088+ if sup_sp == origin_sp {
1089+ err. span_label ( * external_span,
1090+ "borrowed data cannot be moved into here..." ) ;
1091+ err. span_label ( * closure_span,
1092+ "...because it cannot outlive this closure" ) ;
1093+ } else {
1094+ err. span_label ( * closure_span,
1095+ "borrowed data cannot outlive this closure" ) ;
1096+ err. span_label ( origin_sp,
1097+ "cannot infer an appropriate lifetime" ) ;
1098+ }
10911099 err. emit ( ) ;
10921100 return ;
10931101 }
0 commit comments