From d3f9af88919f213f70147da0317e4fc4b54fc830 Mon Sep 17 00:00:00 2001 From: Matthew Jasper Date: Sun, 23 Sep 2018 15:56:14 +0100 Subject: [PATCH] Remove irrelevant message about drop order When dropping a self-borrowing struct we shouldn't add a "values in a scope are dropped in the opposite order they are defined" message, since there is only one value being dropped. --- src/librustc_mir/borrow_check/nll/explain_borrow/mod.rs | 6 ++++-- src/test/ui/dropck/dropck-union.nll.stderr | 2 -- src/test/ui/span/dropck_direct_cycle_with_drop.nll.stderr | 2 -- src/test/ui/span/issue28498-reject-ex1.nll.stderr | 1 - .../unboxed-closures-failed-recursive-fn-1.nll.stderr | 2 -- 5 files changed, 4 insertions(+), 9 deletions(-) diff --git a/src/librustc_mir/borrow_check/nll/explain_borrow/mod.rs b/src/librustc_mir/borrow_check/nll/explain_borrow/mod.rs index 755148b6992..f4052f94801 100644 --- a/src/librustc_mir/borrow_check/nll/explain_borrow/mod.rs +++ b/src/librustc_mir/borrow_check/nll/explain_borrow/mod.rs @@ -143,13 +143,15 @@ pub(in borrow_check) fn explain_why_borrow_contains_point( Some(Cause::DropVar(local, location)) => match &mir.local_decls[local].name { Some(local_name) => { let mut should_note_order = false; - if let Some((WriteKind::StorageDeadOrDrop(_), place)) = kind_place { + if let Some((WriteKind::StorageDeadOrDrop, place)) = kind_place { if let Place::Local(borrowed_local) = place { let dropped_local_scope = mir.local_decls[local].visibility_scope; let borrowed_local_scope = mir.local_decls[*borrowed_local].visibility_scope; - if mir.is_sub_scope(borrowed_local_scope, dropped_local_scope) { + if mir.is_sub_scope(borrowed_local_scope, dropped_local_scope) + && local != *borrowed_local + { should_note_order = true; } } diff --git a/src/test/ui/dropck/dropck-union.nll.stderr b/src/test/ui/dropck/dropck-union.nll.stderr index 35d7ffc7879..ffb322b85dc 100644 --- a/src/test/ui/dropck/dropck-union.nll.stderr +++ b/src/test/ui/dropck/dropck-union.nll.stderr @@ -8,8 +8,6 @@ LL | } | | | `v` dropped here while still borrowed | borrow later used here, when `v` is dropped - | - = note: values in a scope are dropped in the opposite order they are defined error: aborting due to previous error diff --git a/src/test/ui/span/dropck_direct_cycle_with_drop.nll.stderr b/src/test/ui/span/dropck_direct_cycle_with_drop.nll.stderr index 2884b1818ba..baf3cef2ae8 100644 --- a/src/test/ui/span/dropck_direct_cycle_with_drop.nll.stderr +++ b/src/test/ui/span/dropck_direct_cycle_with_drop.nll.stderr @@ -23,8 +23,6 @@ LL | } | | | `d1` dropped here while still borrowed | borrow later used here, when `d1` is dropped - | - = note: values in a scope are dropped in the opposite order they are defined error: aborting due to 2 previous errors diff --git a/src/test/ui/span/issue28498-reject-ex1.nll.stderr b/src/test/ui/span/issue28498-reject-ex1.nll.stderr index 1f72b78ebc7..0f6f6e381d8 100644 --- a/src/test/ui/span/issue28498-reject-ex1.nll.stderr +++ b/src/test/ui/span/issue28498-reject-ex1.nll.stderr @@ -11,7 +11,6 @@ LL | } | borrow later used here, when `foo` is dropped | = note: consider using a `let` binding to create a longer lived value - = note: values in a scope are dropped in the opposite order they are defined error: aborting due to previous error diff --git a/src/test/ui/unboxed-closures/unboxed-closures-failed-recursive-fn-1.nll.stderr b/src/test/ui/unboxed-closures/unboxed-closures-failed-recursive-fn-1.nll.stderr index 8cda1e60ba9..afd90237d16 100644 --- a/src/test/ui/unboxed-closures/unboxed-closures-failed-recursive-fn-1.nll.stderr +++ b/src/test/ui/unboxed-closures/unboxed-closures-failed-recursive-fn-1.nll.stderr @@ -11,8 +11,6 @@ LL | } | | | `factorial` dropped here while still borrowed | borrow later used here, when `factorial` is dropped - | - = note: values in a scope are dropped in the opposite order they are defined error[E0506]: cannot assign to `factorial` because it is borrowed --> $DIR/unboxed-closures-failed-recursive-fn-1.rs:30:5 -- 2.44.0