Rollup merge of #52067 - csmoe:issue-51167, r=nikomatsakis
Visit the mir basic blocks in reverse-postfix order cc #51167 r? @nikomatsakis
This commit is contained in:
commit
ec6bba319b
7 changed files with 55 additions and 55 deletions
|
@ -17,6 +17,7 @@ use rustc_data_structures::work_queue::WorkQueue;
|
|||
|
||||
use rustc::ty::{self, TyCtxt};
|
||||
use rustc::mir::{self, Mir, BasicBlock, BasicBlockData, Location, Statement, Terminator};
|
||||
use rustc::mir::traversal;
|
||||
use rustc::session::Session;
|
||||
|
||||
use std::borrow::Borrow;
|
||||
|
@ -332,7 +333,7 @@ pub(crate) trait DataflowResultsConsumer<'a, 'tcx: 'a> {
|
|||
|
||||
fn analyze_results(&mut self, flow_uninit: &mut Self::FlowState) {
|
||||
let flow = flow_uninit;
|
||||
for bb in self.mir().basic_blocks().indices() {
|
||||
for (bb, _) in traversal::reverse_postorder(self.mir()) {
|
||||
flow.reset_to_entry_of(bb);
|
||||
self.process_basic_block(bb, flow);
|
||||
}
|
||||
|
|
|
@ -2,10 +2,9 @@ error[E0597]: borrowed value does not live long enough
|
|||
--> $DIR/issue-47184.rs:14:44
|
||||
|
|
||||
LL | let _vec: Vec<&'static String> = vec![&String::new()];
|
||||
| ^^^^^^^^^^^^^ temporary value does not live long enough
|
||||
LL | //~^ ERROR borrowed value does not live long enough [E0597]
|
||||
LL | }
|
||||
| - temporary value only lives until here
|
||||
| ^^^^^^^^^^^^^ - temporary value only lives until here
|
||||
| |
|
||||
| temporary value does not live long enough
|
||||
|
|
||||
= note: borrowed value must be valid for the static lifetime...
|
||||
|
||||
|
|
|
@ -55,6 +55,18 @@ LL | | }
|
|||
LL | | }
|
||||
| |_^
|
||||
|
||||
error[E0502]: cannot borrow `*map` as mutable because it is also borrowed as immutable (Mir)
|
||||
--> $DIR/get_default.rs:45:17
|
||||
|
|
||||
LL | match map.get() {
|
||||
| --- immutable borrow occurs here
|
||||
LL | Some(v) => {
|
||||
LL | map.set(String::new()); // Both AST and MIR error here
|
||||
| ^^^ mutable borrow occurs here
|
||||
...
|
||||
LL | return v;
|
||||
| - borrow later used here
|
||||
|
||||
error[E0502]: cannot borrow `*map` as mutable because it is also borrowed as immutable (Mir)
|
||||
--> $DIR/get_default.rs:51:17
|
||||
|
|
||||
|
@ -76,18 +88,6 @@ LL | | }
|
|||
LL | | }
|
||||
| |_^
|
||||
|
||||
error[E0502]: cannot borrow `*map` as mutable because it is also borrowed as immutable (Mir)
|
||||
--> $DIR/get_default.rs:45:17
|
||||
|
|
||||
LL | match map.get() {
|
||||
| --- immutable borrow occurs here
|
||||
LL | Some(v) => {
|
||||
LL | map.set(String::new()); // Both AST and MIR error here
|
||||
| ^^^ mutable borrow occurs here
|
||||
...
|
||||
LL | return v;
|
||||
| - borrow later used here
|
||||
|
||||
error: aborting due to 6 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0502`.
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
error[E0597]: `b1` does not live long enough
|
||||
--> $DIR/dropck_arr_cycle_checked.rs:111:24
|
||||
error[E0597]: `b3` does not live long enough
|
||||
--> $DIR/dropck_arr_cycle_checked.rs:105:24
|
||||
|
|
||||
LL | b3.a[0].v.set(Some(&b1));
|
||||
LL | b1.a[1].v.set(Some(&b3));
|
||||
| ^^^ borrowed value does not live long enough
|
||||
...
|
||||
LL | }
|
||||
|
@ -22,10 +22,10 @@ LL | }
|
|||
| borrowed value only lives until here
|
||||
| borrow later used here, when `b1` is dropped
|
||||
|
||||
error[E0597]: `b3` does not live long enough
|
||||
--> $DIR/dropck_arr_cycle_checked.rs:105:24
|
||||
error[E0597]: `b1` does not live long enough
|
||||
--> $DIR/dropck_arr_cycle_checked.rs:111:24
|
||||
|
|
||||
LL | b1.a[1].v.set(Some(&b3));
|
||||
LL | b3.a[0].v.set(Some(&b1));
|
||||
| ^^^ borrowed value does not live long enough
|
||||
...
|
||||
LL | }
|
||||
|
|
|
@ -1,17 +1,3 @@
|
|||
error[E0597]: `d1` does not live long enough
|
||||
--> $DIR/dropck_direct_cycle_with_drop.rs:48:19
|
||||
|
|
||||
LL | d2.p.set(Some(&d1));
|
||||
| ^^^ borrowed value does not live long enough
|
||||
LL | //~^ ERROR `d1` does not live long enough
|
||||
LL | }
|
||||
| -
|
||||
| |
|
||||
| borrowed value only lives until here
|
||||
| borrow later used here, when `d1` is dropped
|
||||
|
|
||||
= note: values in a scope are dropped in the opposite order they are defined
|
||||
|
||||
error[E0597]: `d2` does not live long enough
|
||||
--> $DIR/dropck_direct_cycle_with_drop.rs:46:19
|
||||
|
|
||||
|
@ -26,6 +12,20 @@ LL | }
|
|||
|
|
||||
= note: values in a scope are dropped in the opposite order they are defined
|
||||
|
||||
error[E0597]: `d1` does not live long enough
|
||||
--> $DIR/dropck_direct_cycle_with_drop.rs:48:19
|
||||
|
|
||||
LL | d2.p.set(Some(&d1));
|
||||
| ^^^ borrowed value does not live long enough
|
||||
LL | //~^ ERROR `d1` does not live long enough
|
||||
LL | }
|
||||
| -
|
||||
| |
|
||||
| borrowed value only lives until here
|
||||
| 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
|
||||
|
||||
For more information about this error, try `rustc --explain E0597`.
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
error[E0597]: `c1` does not live long enough
|
||||
--> $DIR/dropck_vec_cycle_checked.rs:121:24
|
||||
error[E0597]: `c3` does not live long enough
|
||||
--> $DIR/dropck_vec_cycle_checked.rs:115:24
|
||||
|
|
||||
LL | c3.v[0].v.set(Some(&c1));
|
||||
LL | c1.v[1].v.set(Some(&c3));
|
||||
| ^^^ borrowed value does not live long enough
|
||||
...
|
||||
LL | }
|
||||
|
@ -22,10 +22,10 @@ LL | }
|
|||
| borrowed value only lives until here
|
||||
| borrow later used here, when `c1` is dropped
|
||||
|
||||
error[E0597]: `c3` does not live long enough
|
||||
--> $DIR/dropck_vec_cycle_checked.rs:115:24
|
||||
error[E0597]: `c1` does not live long enough
|
||||
--> $DIR/dropck_vec_cycle_checked.rs:121:24
|
||||
|
|
||||
LL | c1.v[1].v.set(Some(&c3));
|
||||
LL | c3.v[0].v.set(Some(&c1));
|
||||
| ^^^ borrowed value does not live long enough
|
||||
...
|
||||
LL | }
|
||||
|
|
|
@ -1,15 +1,3 @@
|
|||
error[E0597]: `c1` does not live long enough
|
||||
--> $DIR/vec-must-not-hide-type-from-dropck.rs:129:24
|
||||
|
|
||||
LL | c2.v[0].v.set(Some(&c1));
|
||||
| ^^^ borrowed value does not live long enough
|
||||
LL | //~^ ERROR `c1` does not live long enough
|
||||
LL | }
|
||||
| -
|
||||
| |
|
||||
| borrowed value only lives until here
|
||||
| borrow later used here, when `c1` is dropped
|
||||
|
||||
error[E0597]: `c2` does not live long enough
|
||||
--> $DIR/vec-must-not-hide-type-from-dropck.rs:127:24
|
||||
|
|
||||
|
@ -22,6 +10,18 @@ LL | }
|
|||
| borrowed value only lives until here
|
||||
| borrow later used here, when `c1` is dropped
|
||||
|
||||
error[E0597]: `c1` does not live long enough
|
||||
--> $DIR/vec-must-not-hide-type-from-dropck.rs:129:24
|
||||
|
|
||||
LL | c2.v[0].v.set(Some(&c1));
|
||||
| ^^^ borrowed value does not live long enough
|
||||
LL | //~^ ERROR `c1` does not live long enough
|
||||
LL | }
|
||||
| -
|
||||
| |
|
||||
| borrowed value only lives until here
|
||||
| borrow later used here, when `c1` is dropped
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0597`.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue