Handle case of moving into vec with uninferred lifetime
This commit is contained in:
parent
2c5f2df201
commit
1a1afd74a6
2 changed files with 19 additions and 8 deletions
|
|
@ -1079,15 +1079,23 @@ impl<'a, 'gcx, 'tcx> InferCtxt<'a, 'gcx, 'tcx> {
|
|||
node: hir::ExprClosure(_, _, _, closure_span, false),
|
||||
..
|
||||
}) => {
|
||||
let sp = var_origin.span();
|
||||
let sup_sp = sup_origin.span();
|
||||
let origin_sp = var_origin.span();
|
||||
let mut err = self.tcx.sess.struct_span_err(
|
||||
sp,
|
||||
sup_sp,
|
||||
"borrowed data cannot be moved outside of its closure");
|
||||
err.span_label(sp, "cannot be moved outside of its closure");
|
||||
err.span_label(*external_span,
|
||||
"borrowed data cannot be moved into here...");
|
||||
err.span_label(*closure_span,
|
||||
"...because it cannot outlive this closure");
|
||||
err.span_label(sup_sp, "cannot be moved outside of its closure");
|
||||
if sup_sp == origin_sp {
|
||||
err.span_label(*external_span,
|
||||
"borrowed data cannot be moved into here...");
|
||||
err.span_label(*closure_span,
|
||||
"...because it cannot outlive this closure");
|
||||
} else {
|
||||
err.span_label(*closure_span,
|
||||
"borrowed data cannot outlive this closure");
|
||||
err.span_label(origin_sp,
|
||||
"cannot infer an appropriate lifetime");
|
||||
}
|
||||
err.emit();
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,9 +25,12 @@ impl CrateId {
|
|||
|
||||
pub fn remove_package_from_database() {
|
||||
let mut lines_to_use: Vec<&CrateId> = Vec::new();
|
||||
//~^ ERROR borrowed data cannot be moved outside of its closure
|
||||
//~^ NOTE cannot infer an appropriate lifetime
|
||||
let push_id = |installed_id: &CrateId| {
|
||||
//~^ NOTE borrowed data cannot outlive this closure
|
||||
lines_to_use.push(installed_id);
|
||||
//~^ ERROR borrowed data cannot be moved outside of its closure
|
||||
//~| NOTE cannot be moved outside of its closure
|
||||
};
|
||||
list_database(push_id);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue