Fix tests after two-phase borrow rewrite
This commit is contained in:
parent
e4e377f6e8
commit
03f198fcee
5 changed files with 14 additions and 33 deletions
|
|
@ -111,7 +111,7 @@ impl<'a, 'tcx, MWF, P> dot::Labeller<'a> for Graph<'a, 'tcx, MWF, P>
|
|||
// | | | | bb11[0]: active |
|
||||
// +---------+----------------------------------+------------------+------------------+
|
||||
// | [00-00] | _7 = const Foo::twiddle(move _8) | [0c-00] | [f3-0f] |
|
||||
// +---------+----------------------------------+------------------+------------------+
|
||||
// +---------+----------------------------------+------------------+------------------+
|
||||
let mut v = Vec::new();
|
||||
self.node_label_internal(n, &mut v, *n, self.mbcx.mir()).unwrap();
|
||||
dot::LabelText::html(String::from_utf8(v).unwrap())
|
||||
|
|
@ -140,7 +140,7 @@ where MWF: MirWithFlowState<'tcx>,
|
|||
block: BasicBlock,
|
||||
mir: &Mir) -> io::Result<()> {
|
||||
// Header rows
|
||||
const HDRS: [&'static str; 4] = ["ENTRY", "MIR", "GEN", "KILL"];
|
||||
const HDRS: [&'static str; 4] = ["ENTRY", "MIR", "BLOCK GENS", "BLOCK KILLS"];
|
||||
const HDR_FMT: &'static str = "bgcolor=\"grey\"";
|
||||
write!(w, "<table><tr><td rowspan=\"{}\">", HDRS.len())?;
|
||||
write!(w, "{:?}", block.index())?;
|
||||
|
|
|
|||
|
|
@ -272,17 +272,6 @@ impl<'a, 'gcx, 'tcx> Borrows<'a, 'gcx, 'tcx> {
|
|||
}
|
||||
}
|
||||
|
||||
/// Represents what kind of usage we've seen.
|
||||
enum PlaceUsageType {
|
||||
/// No usage seen
|
||||
None,
|
||||
/// Has been seen as the argument to a StorageDead statement. This is required to
|
||||
/// gracefully handle cases where user code has an unneeded
|
||||
StorageKilled,
|
||||
/// Has been used in borrow-activating context
|
||||
BorrowActivateUsage
|
||||
}
|
||||
|
||||
/// A MIR visitor that determines if a specific place is used in a two-phase activating
|
||||
/// manner in a given chunk of MIR.
|
||||
struct ContainsUseOfPlace<'b, 'tcx: 'b> {
|
||||
|
|
@ -404,7 +393,8 @@ impl<'a, 'gcx, 'tcx> Borrows<'a, 'gcx, 'tcx> {
|
|||
let stmt = &block_data.statements[location.statement_index];
|
||||
if let mir::StatementKind::EndRegion(region_scope) = stmt.kind {
|
||||
if &ReScope(region_scope) == region {
|
||||
// We encountered an EndRegion statement that terminates the provided region
|
||||
// We encountered an EndRegion statement that terminates the provided
|
||||
// region
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
@ -430,7 +420,7 @@ impl<'a, 'gcx, 'tcx> Borrows<'a, 'gcx, 'tcx> {
|
|||
/// See
|
||||
/// - https://github.com/rust-lang/rust/issues/48431
|
||||
/// for detailed design notes.
|
||||
/// See the TODO in the body of the function for notes on extending support to more
|
||||
/// See the FIXME in the body of the function for notes on extending support to more
|
||||
/// general two-phased borrows.
|
||||
fn compute_activation_location(&self,
|
||||
start_location: Location,
|
||||
|
|
@ -473,7 +463,7 @@ impl<'a, 'gcx, 'tcx> Borrows<'a, 'gcx, 'tcx> {
|
|||
}
|
||||
|
||||
if self.location_contains_use(curr_loc, assigned_place) {
|
||||
// TODO: Handle this case a little more gracefully. Perhaps collect
|
||||
// FIXME: Handle this case a little more gracefully. Perhaps collect
|
||||
// all uses in a vector, and find the point in the CFG that dominates
|
||||
// all of them?
|
||||
// Right now this is sufficient though since there should only be exactly
|
||||
|
|
@ -596,7 +586,9 @@ impl<'a, 'gcx, 'tcx> BitDenotation for Borrows<'a, 'gcx, 'tcx> {
|
|||
// `_sets`.
|
||||
}
|
||||
|
||||
fn before_statement_effect(&self, sets: &mut BlockSets<ReserveOrActivateIndex>, location: Location) {
|
||||
fn before_statement_effect(&self,
|
||||
sets: &mut BlockSets<ReserveOrActivateIndex>,
|
||||
location: Location) {
|
||||
debug!("Borrows::before_statement_effect sets: {:?} location: {:?}", sets, location);
|
||||
self.kill_loans_out_of_scope_at_location(sets, location);
|
||||
}
|
||||
|
|
@ -662,7 +654,6 @@ impl<'a, 'gcx, 'tcx> BitDenotation for Borrows<'a, 'gcx, 'tcx> {
|
|||
|
||||
// Issue #46746: Two-phase borrows handles
|
||||
// stmts of form `Tmp = &mut Borrow` ...
|
||||
// XXX bob_twinkles experiment with removing this
|
||||
match lhs {
|
||||
Place::Local(..) | Place::Static(..) => {} // okay
|
||||
Place::Projection(..) => {
|
||||
|
|
@ -704,7 +695,9 @@ impl<'a, 'gcx, 'tcx> BitDenotation for Borrows<'a, 'gcx, 'tcx> {
|
|||
}
|
||||
}
|
||||
|
||||
fn before_terminator_effect(&self, sets: &mut BlockSets<ReserveOrActivateIndex>, location: Location) {
|
||||
fn before_terminator_effect(&self,
|
||||
sets: &mut BlockSets<ReserveOrActivateIndex>,
|
||||
location: Location) {
|
||||
debug!("Borrows::before_terminator_effect sets: {:?} location: {:?}", sets, location);
|
||||
self.kill_loans_out_of_scope_at_location(sets, location);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
// in the type of `p` includes the points after `&v[0]` up to (but not
|
||||
// including) the call to `use_x`. The `else` branch is not included.
|
||||
|
||||
// compile-flags:-Zborrowck=compare -Znll
|
||||
// compile-flags:-Zborrowck=compare -Znll -Ztwo-phase-borrows
|
||||
|
||||
#![allow(warnings)]
|
||||
#![feature(rustc_attrs)]
|
||||
|
|
|
|||
|
|
@ -37,7 +37,6 @@ fn main() {
|
|||
let nref = &u.z.c;
|
||||
//~^ ERROR cannot borrow `u.z.c` as immutable because it is also borrowed as mutable [E0502]
|
||||
println!("{} {}", mref, nref)
|
||||
//~^ ERROR cannot borrow `u.s.a` as mutable because it is also borrowed as immutable [E0502]
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -10,17 +10,6 @@ LL | //~^ ERROR cannot borrow `u.z.c` as immutable because it is also bo
|
|||
LL | println!("{} {}", mref, nref)
|
||||
| ---- borrow later used here
|
||||
|
||||
error[E0502]: cannot borrow `u.s.a` as mutable because it is also borrowed as immutable
|
||||
--> $DIR/issue-45157.rs:39:27
|
||||
|
|
||||
LL | let nref = &u.z.c;
|
||||
| ------ immutable borrow occurs here
|
||||
LL | //~^ ERROR cannot borrow `u.z.c` as immutable because it is also borrowed as mutable [E0502]
|
||||
LL | println!("{} {}", mref, nref)
|
||||
| ^^^^ ---- borrow later used here
|
||||
| |
|
||||
| mutable borrow occurs here
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
error: aborting due to previous error
|
||||
|
||||
If you want more information on this error, try using "rustc --explain E0502"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue