Improve 'dropped here' note.
Start mentioning function name that the variable is valid within in notes to provide context.
This commit is contained in:
parent
9eb8d1179c
commit
876774bf71
7 changed files with 25 additions and 9 deletions
|
|
@ -519,7 +519,23 @@ impl<'cx, 'gcx, 'tcx> MirBorrowckCtxt<'cx, 'gcx, 'tcx> {
|
|||
borrow_span,
|
||||
format!("`{}` would have to be valid for `{}`", name, region_name)
|
||||
);
|
||||
err.span_label(drop_span, format!("but `{}` dropped here while still borrowed", name));
|
||||
|
||||
if let Some(fn_node_id) = self.infcx.tcx.hir.as_local_node_id(self.mir_def_id) {
|
||||
err.span_label(
|
||||
drop_span,
|
||||
format!(
|
||||
"...but `{}` is only valid for the duration of the `{}` function, so it \
|
||||
is dropped here while still borrowed",
|
||||
name,
|
||||
self.infcx.tcx.hir.name(fn_node_id),
|
||||
)
|
||||
);
|
||||
} else {
|
||||
err.span_label(
|
||||
drop_span,
|
||||
format!("...but `{}` dropped here while still borrowed", name)
|
||||
);
|
||||
}
|
||||
|
||||
if let BorrowExplanation::MustBeValidFor(..) = explanation { } else {
|
||||
explanation.emit(self.infcx.tcx, &mut err);
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ LL | &x
|
|||
| ^^ `x` would have to be valid for `'y`
|
||||
LL | //~^ ERROR: `x` does not live long enough
|
||||
LL | }
|
||||
| - but `x` dropped here while still borrowed
|
||||
| - ...but `x` is only valid for the duration of the `silly` function, so it is dropped here while still borrowed
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ LL | &v
|
|||
| ^^ `v` would have to be valid for `'a`
|
||||
LL | //~^ ERROR `v` does not live long enough [E0597]
|
||||
LL | }
|
||||
| - but `v` dropped here while still borrowed
|
||||
| - ...but `v` is only valid for the duration of the `foo` function, so it is dropped here while still borrowed
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ LL | let x = 22;
|
|||
LL | &x
|
||||
| ^^ `x` would have to be valid for `'0`
|
||||
LL | }
|
||||
| - but `x` dropped here while still borrowed
|
||||
| - ...but `x` is only valid for the duration of the `bar` function, so it is dropped here while still borrowed
|
||||
|
||||
error[E0597]: `x` does not live long enough
|
||||
--> $DIR/issue-52534-1.rs:25:5
|
||||
|
|
@ -22,7 +22,7 @@ LL | let x = 22;
|
|||
LL | &x
|
||||
| ^^ `x` would have to be valid for `'0`
|
||||
LL | }
|
||||
| - but `x` dropped here while still borrowed
|
||||
| - ...but `x` is only valid for the duration of the `foo` function, so it is dropped here while still borrowed
|
||||
|
||||
error[E0597]: `x` does not live long enough
|
||||
--> $DIR/issue-52534-1.rs:30:6
|
||||
|
|
@ -35,7 +35,7 @@ LL | let x = 22;
|
|||
LL | &&x
|
||||
| ^^ `x` would have to be valid for `'0`
|
||||
LL | }
|
||||
| - but `x` dropped here while still borrowed
|
||||
| - ...but `x` is only valid for the duration of the `baz` function, so it is dropped here while still borrowed
|
||||
|
||||
error[E0597]: borrowed value does not live long enough
|
||||
--> $DIR/issue-52534-1.rs:30:6
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ LL | foo(|a| &x)
|
|||
| |
|
||||
| has type `&'0 u32`
|
||||
LL | }
|
||||
| - but `x` dropped here while still borrowed
|
||||
| - ...but `x` is only valid for the duration of the `bar` function, so it is dropped here while still borrowed
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ LL | if false { &y } else { z }
|
|||
| ^ `y` would have to be valid for `'0`
|
||||
LL | });
|
||||
LL | }
|
||||
| - but `y` dropped here while still borrowed
|
||||
| - ...but `y` is only valid for the duration of the `nested` function, so it is dropped here while still borrowed
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ LL | ay = &y;
|
|||
| ^ `y` would have to be valid for `'0`
|
||||
...
|
||||
LL | }
|
||||
| - but `y` dropped here while still borrowed
|
||||
| - ...but `y` is only valid for the duration of the `nested` function, so it is dropped here while still borrowed
|
||||
|
||||
error: unsatisfied lifetime constraints
|
||||
--> $DIR/regions-nested-fns.rs:23:68
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue