let kind_place = kind.filter(|_| place_desc.is_some()).map(|k| (k, place_span.0));
let explanation = self.explain_why_borrow_contains_point(location, &borrow, kind_place);
+ debug!(
+ "report_borrowed_value_does_not_live_long_enough(place_desc: {:?}, explanation: {:?})",
+ place_desc,
+ explanation
+ );
let err = match (place_desc, explanation) {
(Some(_), _) if self.is_place_thread_local(root_place) => {
self.report_thread_local_value_does_not_live_long_enough(drop_span, borrow_span)
span,
&format!("`{}`", name),
),
+ (
+ Some(ref name),
+ BorrowExplanation::MustBeValidFor {
+ category: category @ ConstraintCategory::OpaqueType,
+ from_closure: false,
+ ref region_name,
+ span,
+ ..
+ },
+
+ ) if borrow_spans.for_generator() => self.report_escaping_closure_capture(
+ borrow_spans.args_or_use(),
+ borrow_span,
+ region_name,
+ category,
+ span,
+ &format!("`{}`", name),
+ ),
(
ref name,
BorrowExplanation::MustBeValidFor {
ConstraintCategory::Return => {
err.span_note(constraint_span, "closure is returned here");
}
+ ConstraintCategory::OpaqueType => {
+ err.span_note(constraint_span, "generator is returned here");
+ }
ConstraintCategory::CallArgument => {
fr_name.highlight_region_name(&mut err);
err.span_note(
mod find_use;
+#[derive(Debug)]
pub(in crate::borrow_check) enum BorrowExplanation {
UsedLater(LaterUseKind, Span),
UsedLaterInLoop(LaterUseKind, Span),
Unexplained,
}
-#[derive(Clone, Copy)]
+#[derive(Clone, Copy, Debug)]
pub(in crate::borrow_check) enum LaterUseKind {
TraitCapture,
ClosureCapture,
error[E0373]: closure may outlive the current function, but it borrows `x`, which is owned by the current function
- --> $DIR/async-borrowck-escaping-block-error.rs:5:20
+ --> $DIR/async-borrowck-escaping-block-error.rs:6:20
|
LL | Box::new(async { x } )
| ^^-^^
| may outlive borrowed value `x`
|
note: generator is returned here
- --> $DIR/async-borrowck-escaping-block-error.rs:3:13
+ --> $DIR/async-borrowck-escaping-block-error.rs:4:13
|
LL | fn foo() -> Box<impl std::future::Future<Output = u32>> {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^