Update tests for -Zborrowck-mir -> -Zborrowck=mode migration

This commit is contained in:
est31 2017-11-19 23:37:59 +01:00
parent c9af68e90c
commit 755fa9c23e
57 changed files with 194 additions and 320 deletions

View File

@ -9,7 +9,7 @@
// except according to those terms.
// revisions: ast mir
//[mir]compile-flags: -Z emit-end-regions -Z borrowck-mir
//[mir]compile-flags: -Z borrowck=mir
struct FancyNum {
num: u8,
@ -19,8 +19,7 @@ fn main() {
let mut fancy_num = FancyNum { num: 5 };
let fancy_ref = &fancy_num;
fancy_num = FancyNum { num: 6 }; //[ast]~ ERROR E0506
//[mir]~^ ERROR (Mir) [E0506]
//[mir]~| ERROR (Ast) [E0506]
//[mir]~^ ERROR [E0506]
println!("Num: {}, Ref: {}", fancy_num.num, fancy_ref.num);
}

View File

@ -9,13 +9,12 @@
// except according to those terms.
// revisions: ast mir
//[mir]compile-flags: -Zborrowck-mir
//[mir]compile-flags: -Z borrowck=mir
struct NonCopy;
fn main() {
let array = [NonCopy; 1];
let _value = array[0]; //[ast]~ ERROR E0508
//[mir]~^ ERROR (Ast) [E0508]
//[mir]~| ERROR (Mir) [E0508]
let _value = array[0]; //[ast]~ ERROR [E0508]
//[mir]~^ ERROR [E0508]
}

View File

@ -9,12 +9,11 @@
// except according to those terms.
// revisions: ast mir
//[mir]compile-flags: -Z emit-end-regions -Z borrowck-mir
//[mir]compile-flags: -Z borrowck=mir
static NUM: i32 = 18;
fn main() {
NUM = 20; //[ast]~ ERROR E0594
//[mir]~^ ERROR cannot assign to immutable static item (Ast)
//[mir]~| ERROR cannot assign to immutable static item `NUM` (Mir)
//[mir]~^ ERROR cannot assign to immutable static item
}

View File

@ -9,11 +9,10 @@
// except according to those terms.
// revisions: ast mir
//[mir]compile-flags: -Z emit-end-regions -Z borrowck-mir
//[mir]compile-flags: -Z borrowck=mir
fn main() {
let x = 1;
let y = &mut x; //[ast]~ ERROR [E0596]
//[mir]~^ ERROR (Ast) [E0596]
//[mir]~| ERROR (Mir) [E0596]
//[mir]~^ ERROR [E0596]
}

View File

@ -9,7 +9,7 @@
// except according to those terms.
// revisions: ast mir
//[mir]compile-flags: -Z emit-end-regions -Z borrowck-mir
//[mir]compile-flags: -Z borrowck=mir
static static_x : i32 = 1;
static mut static_x_mut : i32 = 1;
@ -20,15 +20,13 @@ fn main() {
{ // borrow of local
let _y1 = &mut x; //[ast]~ ERROR [E0596]
//[mir]~^ ERROR (Ast) [E0596]
//[mir]~| ERROR (Mir) [E0596]
//[mir]~^ ERROR [E0596]
let _y2 = &mut x_mut; // No error
}
{ // borrow of static
let _y1 = &mut static_x; //[ast]~ ERROR [E0596]
//[mir]~^ ERROR (Ast) [E0596]
//[mir]~| ERROR (Mir) [E0596]
//[mir]~^ ERROR [E0596]
unsafe { let _y2 = &mut static_x_mut; } // No error
}
@ -37,8 +35,7 @@ fn main() {
let mut box_x_mut = Box::new(1);
let _y1 = &mut *box_x; //[ast]~ ERROR [E0596]
//[mir]~^ ERROR (Ast) [E0596]
//[mir]~| ERROR (Mir) [E0596]
//[mir]~^ ERROR [E0596]
let _y2 = &mut *box_x_mut; // No error
}
@ -47,8 +44,7 @@ fn main() {
let ref_x_mut = &mut x_mut;
let _y1 = &mut *ref_x; //[ast]~ ERROR [E0596]
//[mir]~^ ERROR (Ast) [E0596]
//[mir]~| ERROR (Mir) [E0596]
//[mir]~^ ERROR [E0596]
let _y2 = &mut *ref_x_mut; // No error
}
@ -58,8 +54,7 @@ fn main() {
unsafe {
let _y1 = &mut *ptr_x; //[ast]~ ERROR [E0596]
//[mir]~^ ERROR (Ast) [E0596]
//[mir]~| ERROR (Mir) [E0596]
//[mir]~^ ERROR [E0596]
let _y2 = &mut *ptr_mut_x; // No error
}
}
@ -69,8 +64,7 @@ fn main() {
let mut foo = Foo { f: &mut x_mut, g: &x };
let foo_ref = &foo;
let _y = &mut *foo_ref.f; //[ast]~ ERROR [E0389]
//[mir]~^ ERROR (Ast) [E0389]
//[mir]~| ERROR (Mir) [E0596]
//[mir]~^ ERROR [E0596]
// FIXME: Wrong error in MIR
}
}

View File

@ -9,7 +9,7 @@
// except according to those terms.
// revisions: ast mir
//[mir]compile-flags: -Z emit-end-regions -Z borrowck-mir
//[mir]compile-flags: -Z borrowck=mir
struct point { x: isize, y: isize }
@ -21,8 +21,7 @@ fn a() {
// inherently mutable; since `p` was made immutable, `p.x` is now
// immutable. Otherwise the type of &_q.x (&isize) would be wrong.
p.x = 5; //[ast]~ ERROR cannot assign to `p.x`
//[mir]~^ ERROR cannot assign to `p.x` because it is borrowed (Ast)
//[mir]~| ERROR cannot assign to `p.x` because it is borrowed (Mir)
//[mir]~^ ERROR cannot assign to `p.x` because it is borrowed
q.x;
}
@ -33,8 +32,7 @@ fn c() {
let mut p = point {x: 3, y: 4};
let q = &p.y;
p = point {x: 5, y: 7};//[ast]~ ERROR cannot assign to `p`
//[mir]~^ ERROR cannot assign to `p` because it is borrowed (Ast)
//[mir]~| ERROR cannot assign to `p` because it is borrowed (Mir)
//[mir]~^ ERROR cannot assign to `p` because it is borrowed
p.x; // silence warning
*q; // stretch loan
}
@ -46,8 +44,7 @@ fn d() {
let mut p = point {x: 3, y: 4};
let q = &p.y;
p.y = 5; //[ast]~ ERROR cannot assign to `p.y`
//[mir]~^ ERROR cannot assign to `p.y` because it is borrowed (Ast)
//[mir]~| ERROR cannot assign to `p.y` because it is borrowed (Mir)
//[mir]~^ ERROR cannot assign to `p.y` because it is borrowed
*q;
}

View File

@ -9,13 +9,12 @@
// except according to those terms.
// revisions: ast mir
//[mir]compile-flags: -Z emit-end-regions -Z borrowck-mir
//[mir]compile-flags: -Z borrowck=mir
static foo: isize = 5;
fn main() {
// assigning to various global constants
foo = 6; //[ast]~ ERROR cannot assign to immutable static item
//[mir]~^ ERROR cannot assign to immutable static item (Ast)
//[mir]~| ERROR cannot assign to immutable static item `foo` (Mir)
//[mir]~^ ERROR cannot assign to immutable static item `foo`
}

View File

@ -13,7 +13,7 @@
// ignore-tidy-linelength
// revisions: ast mir
//[mir]compile-flags: -Z emit-end-regions -Z borrowck-mir
//[mir]compile-flags: -Z borrowck=mir
#![feature(box_syntax)]
@ -29,48 +29,42 @@ fn a() {
let mut x = 3;
let c1 = || x = 4;
let c2 = || x * 5; //[ast]~ ERROR cannot borrow `x`
//[mir]~^ ERROR cannot borrow `x` as immutable because it is also borrowed as mutable (Ast)
//[mir]~| ERROR cannot borrow `x` as immutable because it is also borrowed as mutable (Mir)
//[mir]~^ ERROR cannot borrow `x` as immutable because it is also borrowed as mutable
}
fn b() {
let mut x = 3;
let c1 = || set(&mut x);
let c2 = || get(&x); //[ast]~ ERROR cannot borrow `x`
//[mir]~^ ERROR cannot borrow `x` as immutable because it is also borrowed as mutable (Ast)
//[mir]~| ERROR cannot borrow `x` as immutable because it is also borrowed as mutable (Mir)
//[mir]~^ ERROR cannot borrow `x` as immutable because it is also borrowed as mutable
}
fn c() {
let mut x = 3;
let c1 = || set(&mut x);
let c2 = || x * 5; //[ast]~ ERROR cannot borrow `x`
//[mir]~^ ERROR cannot borrow `x` as immutable because it is also borrowed as mutable (Ast)
//[mir]~| ERROR cannot borrow `x` as immutable because it is also borrowed as mutable (Mir)
//[mir]~^ ERROR cannot borrow `x` as immutable because it is also borrowed as mutable
}
fn d() {
let mut x = 3;
let c2 = || x * 5;
x = 5; //[ast]~ ERROR cannot assign
//[mir]~^ ERROR cannot assign to `x` because it is borrowed (Ast)
//[mir]~| ERROR cannot assign to `x` because it is borrowed (Mir)
//[mir]~^ ERROR cannot assign to `x` because it is borrowed
}
fn e() {
let mut x = 3;
let c1 = || get(&x);
x = 5; //[ast]~ ERROR cannot assign
//[mir]~^ ERROR cannot assign to `x` because it is borrowed (Ast)
//[mir]~| ERROR cannot assign to `x` because it is borrowed (Mir)
//[mir]~^ ERROR cannot assign to `x` because it is borrowed
}
fn f() {
let mut x: Box<_> = box 3;
let c1 = || get(&*x);
*x = 5; //[ast]~ ERROR cannot assign
//[mir]~^ ERROR cannot assign to `*x` because it is borrowed (Ast)
//[mir]~| ERROR cannot assign to `*x` because it is borrowed (Mir)
*x = 5; //[ast]~ ERROR cannot assign to `*x`
//[mir]~^ ERROR cannot assign to `*x` because it is borrowed
}
fn g() {
@ -81,8 +75,7 @@ fn g() {
let mut x: Box<_> = box Foo { f: box 3 };
let c1 = || get(&*x.f);
*x.f = 5; //[ast]~ ERROR cannot assign to `*x.f`
//[mir]~^ ERROR cannot assign to `*x.f` because it is borrowed (Ast)
//[mir]~| ERROR cannot assign to `*x.f` because it is borrowed (Mir)
//[mir]~^ ERROR cannot assign to `*x.f` because it is borrowed
}
fn h() {
@ -93,8 +86,7 @@ fn h() {
let mut x: Box<_> = box Foo { f: box 3 };
let c1 = || get(&*x.f);
let c2 = || *x.f = 5; //[ast]~ ERROR cannot borrow `x` as mutable
//[mir]~^ ERROR cannot borrow `x` as mutable because it is also borrowed as immutable (Ast)
//[mir]~| ERROR cannot borrow `x` as mutable because it is also borrowed as immutable (Mir)
//[mir]~^ ERROR cannot borrow `x` as mutable because it is also borrowed as immutable
}
fn main() {

View File

@ -10,7 +10,7 @@
// ignore-tidy-linelength
// revisions: ast mir
//[mir]compile-flags: -Z emit-end-regions -Z borrowck-mir
//[mir]compile-flags: -Z borrowck=mir
#![feature(slice_patterns)]
#![feature(advanced_slice_patterns)]
@ -52,24 +52,21 @@ fn main() {
let mut f = Foo { x: 22 };
let _x = f.x();
f.x; //[ast]~ ERROR cannot use `f.x` because it was mutably borrowed
//[mir]~^ ERROR cannot use `f.x` because it was mutably borrowed (Ast)
//[mir]~| ERROR cannot use `f.x` because it was mutably borrowed (Mir)
//[mir]~^ ERROR cannot use `f.x` because it was mutably borrowed
}
// Local and field from tuple-struct
{
let mut g = Bar(22);
let _0 = g.x();
g.0; //[ast]~ ERROR cannot use `g.0` because it was mutably borrowed
//[mir]~^ ERROR cannot use `g.0` because it was mutably borrowed (Ast)
//[mir]~| ERROR cannot use `g.0` because it was mutably borrowed (Mir)
//[mir]~^ ERROR cannot use `g.0` because it was mutably borrowed
}
// Local and field from tuple
{
let mut h = (22, 23);
let _0 = &mut h.0;
h.0; //[ast]~ ERROR cannot use `h.0` because it was mutably borrowed
//[mir]~^ ERROR cannot use `h.0` because it was mutably borrowed (Ast)
//[mir]~| ERROR cannot use `h.0` because it was mutably borrowed (Mir)
//[mir]~^ ERROR cannot use `h.0` because it was mutably borrowed
}
// Local and field from enum
{
@ -78,8 +75,7 @@ fn main() {
match e {
Baz::X(value) => value
//[ast]~^ ERROR cannot use `e.0` because it was mutably borrowed
//[mir]~^^ ERROR cannot use `e.0` because it was mutably borrowed (Ast)
//[mir]~| ERROR cannot use `e.0` because it was mutably borrowed (Mir)
//[mir]~^^ ERROR cannot use `e.0` because it was mutably borrowed
};
}
// Local and field from union
@ -87,32 +83,28 @@ fn main() {
let mut u = U { b: 0 };
let _ra = &mut u.a;
u.a; //[ast]~ ERROR cannot use `u.a` because it was mutably borrowed
//[mir]~^ ERROR cannot use `u.a` because it was mutably borrowed (Ast)
//[mir]~| ERROR cannot use `u.a` because it was mutably borrowed (Mir)
//[mir]~^ ERROR cannot use `u.a` because it was mutably borrowed
}
// Deref and field from struct
{
let mut f = Box::new(Foo { x: 22 });
let _x = f.x();
f.x; //[ast]~ ERROR cannot use `f.x` because it was mutably borrowed
//[mir]~^ ERROR cannot use `f.x` because it was mutably borrowed (Ast)
//[mir]~| ERROR cannot use `f.x` because it was mutably borrowed (Mir)
//[mir]~^ ERROR cannot use `f.x` because it was mutably borrowed
}
// Deref and field from tuple-struct
{
let mut g = Box::new(Bar(22));
let _0 = g.x();
g.0; //[ast]~ ERROR cannot use `g.0` because it was mutably borrowed
//[mir]~^ ERROR cannot use `g.0` because it was mutably borrowed (Ast)
//[mir]~| ERROR cannot use `g.0` because it was mutably borrowed (Mir)
//[mir]~^ ERROR cannot use `g.0` because it was mutably borrowed
}
// Deref and field from tuple
{
let mut h = Box::new((22, 23));
let _0 = &mut h.0;
h.0; //[ast]~ ERROR cannot use `h.0` because it was mutably borrowed
//[mir]~^ ERROR cannot use `h.0` because it was mutably borrowed (Ast)
//[mir]~| ERROR cannot use `h.0` because it was mutably borrowed (Mir)
//[mir]~^ ERROR cannot use `h.0` because it was mutably borrowed
}
// Deref and field from enum
{
@ -121,8 +113,7 @@ fn main() {
match *e {
Baz::X(value) => value
//[ast]~^ ERROR cannot use `e.0` because it was mutably borrowed
//[mir]~^^ ERROR cannot use `e.0` because it was mutably borrowed (Ast)
//[mir]~| ERROR cannot use `e.0` because it was mutably borrowed (Mir)
//[mir]~^^ ERROR cannot use `e.0` because it was mutably borrowed
};
}
// Deref and field from union
@ -130,8 +121,7 @@ fn main() {
let mut u = Box::new(U { b: 0 });
let _ra = &mut u.a;
u.a; //[ast]~ ERROR cannot use `u.a` because it was mutably borrowed
//[mir]~^ ERROR cannot use `u.a` because it was mutably borrowed (Ast)
//[mir]~| ERROR cannot use `u.a` because it was mutably borrowed (Mir)
//[mir]~^ ERROR cannot use `u.a` because it was mutably borrowed
}
// Constant index
{
@ -140,29 +130,25 @@ fn main() {
match v {
&[x, _, .., _, _] => println!("{}", x),
//[ast]~^ ERROR cannot use `v[..]` because it was mutably borrowed
//[mir]~^^ ERROR cannot use `v[..]` because it was mutably borrowed (Ast)
//[mir]~| ERROR cannot use `v[..]` because it was mutably borrowed (Mir)
//[mir]~^^ ERROR cannot use `v[..]` because it was mutably borrowed
_ => panic!("other case"),
}
match v {
&[_, x, .., _, _] => println!("{}", x),
//[ast]~^ ERROR cannot use `v[..]` because it was mutably borrowed
//[mir]~^^ ERROR cannot use `v[..]` because it was mutably borrowed (Ast)
//[mir]~| ERROR cannot use `v[..]` because it was mutably borrowed (Mir)
//[mir]~^^ ERROR cannot use `v[..]` because it was mutably borrowed
_ => panic!("other case"),
}
match v {
&[_, _, .., x, _] => println!("{}", x),
//[ast]~^ ERROR cannot use `v[..]` because it was mutably borrowed
//[mir]~^^ ERROR cannot use `v[..]` because it was mutably borrowed (Ast)
//[mir]~| ERROR cannot use `v[..]` because it was mutably borrowed (Mir)
//[mir]~^^ ERROR cannot use `v[..]` because it was mutably borrowed
_ => panic!("other case"),
}
match v {
&[_, _, .., _, x] => println!("{}", x),
//[ast]~^ ERROR cannot use `v[..]` because it was mutably borrowed
//[mir]~^^ ERROR cannot use `v[..]` because it was mutably borrowed (Ast)
//[mir]~| ERROR cannot use `v[..]` because it was mutably borrowed (Mir)
//[mir]~^^ ERROR cannot use `v[..]` because it was mutably borrowed
_ => panic!("other case"),
}
}
@ -173,29 +159,25 @@ fn main() {
match v {
&[x..] => println!("{:?}", x),
//[ast]~^ ERROR cannot use `v[..]` because it was mutably borrowed
//[mir]~^^ ERROR cannot use `v[..]` because it was mutably borrowed (Ast)
//[mir]~| ERROR cannot use `v[..]` because it was mutably borrowed (Mir)
//[mir]~^^ ERROR cannot use `v[..]` because it was mutably borrowed
_ => panic!("other case"),
}
match v {
&[_, x..] => println!("{:?}", x),
//[ast]~^ ERROR cannot use `v[..]` because it was mutably borrowed
//[mir]~^^ ERROR cannot use `v[..]` because it was mutably borrowed (Ast)
//[mir]~| ERROR cannot use `v[..]` because it was mutably borrowed (Mir)
//[mir]~^^ ERROR cannot use `v[..]` because it was mutably borrowed
_ => panic!("other case"),
}
match v {
&[x.., _] => println!("{:?}", x),
//[ast]~^ ERROR cannot use `v[..]` because it was mutably borrowed
//[mir]~^^ ERROR cannot use `v[..]` because it was mutably borrowed (Ast)
//[mir]~| ERROR cannot use `v[..]` because it was mutably borrowed (Mir)
//[mir]~^^ ERROR cannot use `v[..]` because it was mutably borrowed
_ => panic!("other case"),
}
match v {
&[_, x.., _] => println!("{:?}", x),
//[ast]~^ ERROR cannot use `v[..]` because it was mutably borrowed
//[mir]~^^ ERROR cannot use `v[..]` because it was mutably borrowed (Ast)
//[mir]~| ERROR cannot use `v[..]` because it was mutably borrowed (Mir)
//[mir]~^^ ERROR cannot use `v[..]` because it was mutably borrowed
_ => panic!("other case"),
}
}
@ -208,14 +190,12 @@ fn main() {
match e {
E::A(ref ax) =>
//[ast]~^ ERROR cannot borrow `e.0` as immutable because `e` is also borrowed as mutable
//[mir]~^^ ERROR cannot borrow `e.0` as immutable because `e` is also borrowed as mutable (Ast)
//[mir]~| ERROR cannot borrow `e.0` as immutable because it is also borrowed as mutable (Mir)
//[mir]~| ERROR cannot use `e` because it was mutably borrowed (Mir)
//[mir]~^^ ERROR cannot borrow `e.0` as immutable because it is also borrowed as mutable
//[mir]~| ERROR cannot use `e` because it was mutably borrowed
println!("e.ax: {:?}", ax),
E::B { x: ref bx } =>
//[ast]~^ ERROR cannot borrow `e.x` as immutable because `e` is also borrowed as mutable
//[mir]~^^ ERROR cannot borrow `e.x` as immutable because `e` is also borrowed as mutable (Ast)
//[mir]~| ERROR cannot borrow `e.x` as immutable because it is also borrowed as mutable (Mir)
//[mir]~^^ ERROR cannot borrow `e.x` as immutable because it is also borrowed as mutable
println!("e.bx: {:?}", bx),
}
}
@ -228,16 +208,14 @@ fn main() {
match s {
S { y: (ref y0, _), .. } =>
//[ast]~^ ERROR cannot borrow `s.y.0` as immutable because `s` is also borrowed as mutable
//[mir]~^^ ERROR cannot borrow `s.y.0` as immutable because `s` is also borrowed as mutable (Ast)
//[mir]~| ERROR cannot borrow `s.y.0` as immutable because it is also borrowed as mutable (Mir)
//[mir]~^^ ERROR cannot borrow `s.y.0` as immutable because it is also borrowed as mutable
println!("y0: {:?}", y0),
_ => panic!("other case"),
}
match s {
S { x: F { y: ref x0, .. }, .. } =>
//[ast]~^ ERROR cannot borrow `s.x.y` as immutable because `s` is also borrowed as mutable
//[mir]~^^ ERROR cannot borrow `s.x.y` as immutable because `s` is also borrowed as mutable (Ast)
//[mir]~| ERROR cannot borrow `s.x.y` as immutable because it is also borrowed as mutable (Mir)
//[mir]~^^ ERROR cannot borrow `s.x.y` as immutable because it is also borrowed as mutable
println!("x0: {:?}", x0),
_ => panic!("other case"),
}
@ -252,7 +230,7 @@ fn main() {
fn bump<'a>(mut block: &mut Block<'a>) {
let x = &mut block;
let p: &'a u8 = &*block.current;
//[mir]~^ ERROR cannot borrow `*block.current` as immutable because it is also borrowed as mutable (Mir)
//[mir]~^ ERROR cannot borrow `*block.current` as immutable because it is also borrowed as mutable
// No errors in AST because of issue rust#38899
}
}
@ -266,7 +244,7 @@ fn main() {
unsafe fn bump2(mut block: *mut Block2) {
let x = &mut block;
let p : *const u8 = &*(*block).current;
//[mir]~^ ERROR cannot borrow `*block.current` as immutable because it is also borrowed as mutable (Mir)
//[mir]~^ ERROR cannot borrow `*block.current` as immutable because it is also borrowed as mutable
// No errors in AST because of issue rust#38899
}
}
@ -277,9 +255,8 @@ fn main() {
let _v = &mut v;
v[0].y;
//[ast]~^ ERROR cannot use `v[..].y` because it was mutably borrowed
//[mir]~^^ ERROR cannot use `v[..].y` because it was mutably borrowed (Ast)
//[mir]~| ERROR cannot use `v[..].y` because it was mutably borrowed (Mir)
//[mir]~| ERROR cannot use `*v` because it was mutably borrowed (Mir)
//[mir]~^^ ERROR cannot use `v[..].y` because it was mutably borrowed
//[mir]~| ERROR cannot use `*v` because it was mutably borrowed
}
// Field of constant index
{
@ -288,7 +265,7 @@ fn main() {
let _v = &mut v;
match v {
&[_, F {x: ref xf, ..}] => println!("{}", xf),
//[mir]~^ ERROR cannot borrow `v[..].x` as immutable because it is also borrowed as mutable (Mir)
//[mir]~^ ERROR cannot borrow `v[..].x` as immutable because it is also borrowed as mutable
// No errors in AST
_ => panic!("other case")
}
@ -299,8 +276,7 @@ fn main() {
|| {
let y = &mut x;
&mut x; //[ast]~ ERROR cannot borrow `**x` as mutable more than once at a time
//[mir]~^ ERROR cannot borrow `**x` as mutable more than once at a time (Ast)
//[mir]~| ERROR cannot borrow `x` as mutable more than once at a time (Mir)
//[mir]~^ ERROR cannot borrow `x` as mutable more than once at a time
*y = 1;
};
}
@ -311,8 +287,7 @@ fn main() {
|| {
let y = &mut x;
&mut x; //[ast]~ ERROR cannot borrow `**x` as mutable more than once at a time
//[mir]~^ ERROR cannot borrow `**x` as mutable more than once at a time (Ast)
//[mir]~| ERROR cannot borrow `x` as mutable more than once at a time (Mir)
//[mir]~^ ERROR cannot borrow `x` as mutable more than once at a time
*y = 1;
}
};
@ -322,8 +297,7 @@ fn main() {
let c = || {
drop(x);
drop(x); //[ast]~ ERROR use of moved value: `x`
//[mir]~^ ERROR use of moved value: `x` (Ast)
//[mir]~| ERROR use of moved value: `x` (Mir)
//[mir]~^ ERROR use of moved value: `x`
};
c();
}

View File

@ -9,7 +9,7 @@
// except according to those terms.
//compile-flags: -Z emit-end-regions -Z borrowck-mir
//compile-flags: -Z borrowck=mir
fn foo(_:String) {}
@ -19,6 +19,6 @@ fn main()
match Some(42) {
Some(_) if { drop(my_str); false } => {}
Some(_) => {}
None => { foo(my_str); } //~ ERROR (Mir) [E0382]
None => { foo(my_str); } //~ ERROR [E0382]
}
}

View File

@ -9,7 +9,7 @@
// except according to those terms.
// revisions: ast mir
//[mir]compile-flags: -Z emit-end-regions -Z borrowck-mir
//[mir]compile-flags: -Z borrowck=mir
// Check that we check fns appearing in constant declarations.
// Issue #22382.
@ -17,8 +17,7 @@
const MOVE: fn(&String) -> String = {
fn broken(x: &String) -> String {
return *x //[ast]~ ERROR cannot move out of borrowed content [E0507]
//[mir]~^ ERROR (Ast) [E0507]
//[mir]~| ERROR (Mir) [E0507]
//[mir]~^ ERROR [E0507]
}
broken
};

View File

@ -9,7 +9,7 @@
// except according to those terms.
// revisions: ast mir
//[mir]compile-flags: -Z emit-end-regions -Z borrowck-mir
//[mir]compile-flags: -Z borrowck=mir
fn main() {
let mut _a = 3;
@ -17,7 +17,6 @@ fn main() {
{
let _c = &*_b;
_a = 4; //[ast]~ ERROR cannot assign to `_a`
//[mir]~^ ERROR cannot assign to `_a` because it is borrowed (Ast)
//[mir]~| ERROR cannot assign to `_a` because it is borrowed (Mir)
//[mir]~^ ERROR cannot assign to `_a` because it is borrowed
}
}

View File

@ -9,7 +9,7 @@
// except according to those terms.
// revisions: ast mir
//[mir]compile-flags: -Z emit-end-regions -Z borrowck-mir
//[mir]compile-flags: -Z borrowck=mir
#[derive(Clone)]
struct point {
@ -21,7 +21,6 @@ fn main() {
let mut origin: point;
origin = point {x: 10,.. origin};
//[ast]~^ ERROR use of possibly uninitialized variable: `origin.y` [E0381]
//[mir]~^^ ERROR (Ast) [E0381]
//[mir]~| ERROR (Mir) [E0381]
//[mir]~^^ ERROR [E0381]
origin.clone();
}

View File

@ -9,7 +9,7 @@
// except according to those terms.
// revisions: ast mir
//[mir]compile-flags: -Z emit-end-regions -Z borrowck-mir
//[mir]compile-flags: -Z borrowck=mir
#![allow(unused_variables)]
#![allow(unused_assignments)]
@ -26,8 +26,7 @@ fn separate_arms() {
}
Some(ref __isize) => {
x = Some(1); //[ast]~ ERROR cannot assign
//[mir]~^ ERROR cannot assign to `x` because it is borrowed (Ast)
//[mir]~| ERROR cannot assign to `x` because it is borrowed (Mir)
//[mir]~^ ERROR cannot assign to `x` because it is borrowed
}
}
x.clone(); // just to prevent liveness warnings

View File

@ -9,12 +9,11 @@
// except according to those terms.
// revisions: ast mir
//[mir]compile-flags: -Z emit-end-regions -Z borrowck-mir
//[mir]compile-flags: -Z borrowck=mir
fn cplusplus_mode(x: isize) -> &'static isize {
&x //[ast]~ ERROR `x` does not live long enough
//[mir]~^ ERROR `x` does not live long enough (Ast)
//[mir]~| ERROR borrowed value does not live long enough (Mir)
//[mir]~^ ERROR borrowed value does not live long enough
}
fn main() {}

View File

@ -9,7 +9,7 @@
// except according to those terms.
// revisions: ast mir
//[mir]compile-flags: -Z emit-end-regions -Z borrowck-mir
//[mir]compile-flags: -Z borrowck=mir
enum Foo {
A(i32),
@ -20,11 +20,10 @@ fn match_enum() {
let mut foo = Foo::B;
let p = &mut foo;
let _ = match foo {
Foo::B => 1, //[mir]~ ERROR (Mir) [E0503]
Foo::B => 1, //[mir]~ ERROR [E0503]
_ => 2,
Foo::A(x) => x //[ast]~ ERROR [E0503]
//[mir]~^ ERROR (Ast) [E0503]
//[mir]~| ERROR (Mir) [E0503]
//[mir]~^ ERROR [E0503]
};
}
@ -33,11 +32,9 @@ fn main() {
let mut x = 1;
let _x = &mut x;
let _ = match x {
x => x + 1, //[ast]~ ERROR E0503
//[mir]~^ ERROR (Mir) [E0503]
//[mir]~| ERROR (Ast) [E0503]
x => x + 1, //[ast]~ ERROR [E0503]
//[mir]~^ ERROR [E0503]
y => y + 2, //[ast]~ ERROR [E0503]
//[mir]~^ ERROR (Mir) [E0503]
//[mir]~| ERROR (Ast) [E0503]
//[mir]~^ ERROR [E0503]
};
}

View File

@ -9,7 +9,7 @@
// except according to those terms.
// revisions: ast mir
//[mir]compile-flags: -Zemit-end-regions -Zborrowck-mir
//[mir]compile-flags: -Z borrowck=mir
// Test that immutable pattern bindings cannot be reassigned.
@ -27,40 +27,35 @@ pub fn main() {
match 1 {
x => {
x += 1; //[ast]~ ERROR cannot assign twice to immutable variable `x`
//[mir]~^ ERROR (Mir) [E0384]
//[mir]~| ERROR (Ast) [E0384]
//[mir]~^ ERROR [E0384]
}
}
match E::Foo(1) {
E::Foo(x) => {
x += 1; //[ast]~ ERROR cannot assign twice to immutable variable `x`
//[mir]~^ ERROR (Mir) [E0384]
//[mir]~| ERROR (Ast) [E0384]
//[mir]~^ ERROR [E0384]
}
}
match (S { bar: 1 }) {
S { bar: x } => {
x += 1; //[ast]~ ERROR cannot assign twice to immutable variable `x`
//[mir]~^ ERROR (Mir) [E0384]
//[mir]~| ERROR (Ast) [E0384]
//[mir]~^ ERROR [E0384]
}
}
match (1,) {
(x,) => {
x += 1; //[ast]~ ERROR cannot assign twice to immutable variable `x`
//[mir]~^ ERROR (Mir) [E0384]
//[mir]~| ERROR (Ast) [E0384]
//[mir]~^ ERROR [E0384]
}
}
match [1,2,3] {
[x,_,_] => {
x += 1; //[ast]~ ERROR cannot assign twice to immutable variable `x`
//[mir]~^ ERROR (Mir) [E0384]
//[mir]~| ERROR (Ast) [E0384]
//[mir]~^ ERROR [E0384]
}
}
}

View File

@ -9,27 +9,24 @@
// except according to those terms.
// revisions: ast mir
//[mir]compile-flags: -Z emit-end-regions -Z borrowck-mir
//[mir]compile-flags: -Z borrowck=mir
fn with<F>(f: F) where F: FnOnce(&String) {}
fn arg_item(&_x: &String) {}
//[ast]~^ ERROR cannot move out of borrowed content [E0507]
//[mir]~^^ ERROR (Ast) [E0507]
//[mir]~| ERROR (Mir) [E0507]
//[mir]~^^ ERROR [E0507]
fn arg_closure() {
with(|&_x| ())
//[ast]~^ ERROR cannot move out of borrowed content [E0507]
//[mir]~^^ ERROR (Ast) [E0507]
//[mir]~| ERROR (Mir) [E0507]
//[mir]~^^ ERROR [E0507]
}
fn let_pat() {
let &_x = &"hi".to_string();
//[ast]~^ ERROR cannot move out of borrowed content [E0507]
//[mir]~^^ ERROR (Ast) [E0507]
//[mir]~| ERROR (Mir) [E0507]
//[mir]~^^ ERROR [E0507]
}
pub fn main() {}

View File

@ -9,13 +9,12 @@
// except according to those terms.
// revisions: ast mir
//[mir]compile-flags: -Z emit-end-regions -Z borrowck-mir
//[mir]compile-flags: -Z borrowck=mir
use std::rc::Rc;
pub fn main() {
let _x = Rc::new(vec![1, 2]).into_iter();
//[ast]~^ ERROR cannot move out of borrowed content [E0507]
//[mir]~^^ ERROR (Ast) [E0507]
//[mir]~| ERROR (Mir) [E0507]
//[mir]~^^ ERROR [E0507]
}

View File

@ -9,7 +9,7 @@
// except according to those terms.
// revisions: ast mir
//[mir]compile-flags: -Z emit-end-regions -Z borrowck-mir
//[mir]compile-flags: -Z borrowck=mir
// Ensure that moves out of static items is forbidden
@ -26,6 +26,5 @@ fn test(f: Foo) {
fn main() {
test(BAR); //[ast]~ ERROR cannot move out of static item [E0507]
//[mir]~^ ERROR (Ast) [E0507]
//[mir]~| ERROR (Mir) [E0507]
//[mir]~^ ERROR [E0507]
}

View File

@ -9,7 +9,7 @@
// except according to those terms.
// revisions: ast mir
//[mir]compile-flags: -Z emit-end-regions -Z borrowck-mir
//[mir]compile-flags: -Z borrowck=mir
struct S {f:String}
impl Drop for S {
@ -20,22 +20,19 @@ fn move_in_match() {
match (S {f:"foo".to_string()}) {
S {f:_s} => {}
//[ast]~^ ERROR cannot move out of type `S`, which implements the `Drop` trait [E0509]
//[mir]~^^ ERROR (Ast) [E0509]
//[mir]~| ERROR (Mir) [E0509]
//[mir]~^^ ERROR [E0509]
}
}
fn move_in_let() {
let S {f:_s} = S {f:"foo".to_string()};
//[ast]~^ ERROR cannot move out of type `S`, which implements the `Drop` trait [E0509]
//[mir]~^^ ERROR (Ast) [E0509]
//[mir]~| ERROR (Mir) [E0509]
//[mir]~^^ ERROR [E0509]
}
fn move_in_fn_arg(S {f:_s}: S) {
//[ast]~^ ERROR cannot move out of type `S`, which implements the `Drop` trait [E0509]
//[mir]~^^ ERROR (Ast) [E0509]
//[mir]~| ERROR (Mir) [E0509]
//[mir]~^^ ERROR [E0509]
}
fn main() {}

View File

@ -13,7 +13,7 @@
// down to O(n) errors (for n problem lines), instead of O(n^2) errors.
// revisions: ast mir
//[mir]compile-flags: -Z emit-end-regions -Z borrowck-mir
//[mir]compile-flags: -Z borrowck=mir
fn main() {
let mut x = 1;
@ -21,18 +21,15 @@ fn main() {
loop {
match 1 {
1 => { addr = &mut x; } //[ast]~ ERROR [E0499]
//[mir]~^ ERROR (Ast) [E0499]
//[mir]~| ERROR (Mir) [E0499]
//[mir]~^ ERROR [E0499]
2 => { addr = &mut x; } //[ast]~ ERROR [E0499]
//[mir]~^ ERROR (Ast) [E0499]
//[mir]~| ERROR (Mir) [E0506]
//[mir]~| ERROR (Mir) [E0499]
//[mir]~| ERROR (Mir) [E0499]
//[mir]~^ ERROR [E0506]
//[mir]~| ERROR [E0499]
//[mir]~| ERROR [E0499]
_ => { addr = &mut x; } //[ast]~ ERROR [E0499]
//[mir]~^ ERROR (Ast) [E0499]
//[mir]~| ERROR (Mir) [E0506]
//[mir]~| ERROR (Mir) [E0499]
//[mir]~| ERROR (Mir) [E0499]
//[mir]~^ ERROR [E0506]
//[mir]~| ERROR [E0499]
//[mir]~| ERROR [E0499]
}
}
}

View File

@ -14,7 +14,7 @@
// here is rather subtle. Issue #20232.
// revisions: ast mir
//[mir]compile-flags: -Z emit-end-regions -Z borrowck-mir
//[mir]compile-flags: -Z borrowck=mir
use std::ops::{Deref, Index};
@ -43,8 +43,7 @@ fn main() {
let i = &v[0].f;
v = MyVec { x: MyPtr { x: Foo { f: 23 } } };
//[ast]~^ ERROR cannot assign to `v`
//[mir]~^^ ERROR cannot assign to `v` because it is borrowed (Ast)
//[mir]~| ERROR cannot assign to `v` because it is borrowed (Mir)
//[mir]~^^ ERROR cannot assign to `v` because it is borrowed
read(*i);
}

View File

@ -9,7 +9,7 @@
// except according to those terms.
// revisions: ast mir
//[mir]compile-flags: -Z emit-end-regions -Z borrowck-mir
//[mir]compile-flags: -Z borrowck=mir
use std::ops::{Index, IndexMut};
@ -61,17 +61,14 @@ fn main() {
let rs = &mut s;
println!("{}", f[&s]);
//[ast]~^ ERROR cannot borrow `s` as immutable because it is also borrowed as mutable
//[mir]~^^ ERROR cannot borrow `s` as immutable because it is also borrowed as mutable (Ast)
//[mir]~| ERROR cannot borrow `s` as immutable because it is also borrowed as mutable (Mir)
//[mir]~^^ ERROR cannot borrow `s` as immutable because it is also borrowed as mutable
f[&s] = 10;
//[ast]~^ ERROR cannot borrow `s` as immutable because it is also borrowed as mutable
//[mir]~^^ ERROR cannot borrow `s` as immutable because it is also borrowed as mutable (Ast)
//[mir]~| ERROR cannot borrow `s` as immutable because it is also borrowed as mutable (Mir)
//[mir]~^^ ERROR cannot borrow `s` as immutable because it is also borrowed as mutable
let s = Bar {
x: 1,
};
s[2] = 20;
//[ast]~^ ERROR cannot assign to immutable indexed content
//[mir]~^^ ERROR cannot assign to immutable indexed content
// FIXME Error for MIR
}

View File

@ -9,7 +9,7 @@
// except according to those terms.
// revisions: ast mir
//[mir]compile-flags: -Z emit-end-regions -Z borrowck-mir
//[mir]compile-flags: -Z borrowck=mir
fn main() {
let mut x: Option<isize> = None;
@ -21,8 +21,7 @@ fn main() {
Some(ref i) => {
// But on this branch, `i` is an outstanding borrow
x = Some(*i+1); //[ast]~ ERROR cannot assign to `x`
//[mir]~^ ERROR cannot assign to `x` because it is borrowed (Ast)
//[mir]~| ERROR cannot assign to `x` because it is borrowed (Mir)
//[mir]~^ ERROR cannot assign to `x` because it is borrowed
}
}
x.clone(); // just to prevent liveness warnings

View File

@ -8,7 +8,7 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.
// compile-flags: -Z emit-end-regions -Z borrowck-mir
// compile-flags: -Z borrowck=compare
fn ok() {
loop {

View File

@ -9,7 +9,7 @@
// except according to those terms.
// revisions: ast mir
//[mir]compile-flags: -Z emit-end-regions -Z borrowck-mir
//[mir]compile-flags: -Z borrowck=mir
// Issue 4691: Ensure that functional-struct-update can only copy, not
// move, when the struct implements Drop.
@ -24,15 +24,13 @@ impl Drop for T { fn drop(&mut self) { } }
fn f(s0:S) {
let _s2 = S{a: 2, ..s0};
//[ast]~^ error: cannot move out of type `S`, which implements the `Drop` trait
//[mir]~^^ ERROR (Ast) [E0509]
//[mir]~| ERROR (Mir) [E0509]
//[mir]~^^ ERROR [E0509]
}
fn g(s0:T) {
let _s2 = T{a: 2, ..s0};
//[ast]~^ error: cannot move out of type `T`, which implements the `Drop` trait
//[mir]~^^ ERROR (Ast) [E0509]
//[mir]~| ERROR (Mir) [E0509]
//[mir]~^^ ERROR [E0509]
}
fn main() { }

View File

@ -9,7 +9,7 @@
// except according to those terms.
// revisions: ast mir
//[mir]compile-flags: -Z emit-end-regions -Z borrowck-mir
//[mir]compile-flags: -Z borrowck=mir
#![feature(thread_local)]
@ -19,6 +19,5 @@ static FOO: u8 = 3;
fn assert_static(_t: &'static u8) {}
fn main() {
assert_static(&FOO); //[ast]~ ERROR [E0597]
//[mir]~^ ERROR (Ast) [E0597]
//[mir]~| ERROR (Mir) [E0597]
//[mir]~^ ERROR [E0597]
}

View File

@ -10,13 +10,12 @@
// ignore-tidy-linelength
// revisions: ast mir
//[mir]compile-flags: -Z emit-end-regions -Z borrowck-mir
//[mir]compile-flags: -Z borrowck=mir
fn foo(x: Box<isize>) -> isize {
let y = &*x;
free(x); //[ast]~ ERROR cannot move out of `x` because it is borrowed
//[mir]~^ ERROR cannot move out of `x` because it is borrowed (Ast)
//[mir]~| ERROR cannot move out of `x` because it is borrowed (Mir)
//[mir]~^ ERROR cannot move out of `x` because it is borrowed
*y
}

View File

@ -9,7 +9,7 @@
// except according to those terms.
// revisions: ast mir
//[mir]compile-flags: -Z emit-end-regions -Z borrowck-mir
//[mir]compile-flags: -Z borrowck=mir
// Check that do not allow access to fields of uninitialized or moved
// structs.
@ -33,17 +33,14 @@ fn main() {
let mut a: Point;
let _ = a.x + 1; //[ast]~ ERROR use of possibly uninitialized variable: `a.x`
//[mir]~^ ERROR [E0381]
//[mir]~| ERROR (Mir) [E0381]
let mut line1 = Line::default();
let _moved = line1.origin;
let _ = line1.origin.x + 1; //[ast]~ ERROR use of collaterally moved value: `line1.origin.x`
//[mir]~^ [E0382]
//[mir]~| (Mir) [E0382]
let mut line2 = Line::default();
let _moved = (line2.origin, line2.middle);
line2.consume(); //[ast]~ ERROR use of partially moved value: `line2` [E0382]
//[mir]~^ [E0382]
//[mir]~| (Mir) [E0382]
}

View File

@ -9,7 +9,7 @@
// except according to those terms.
// revisions: ast mir
//[mir]compile-flags: -Z emit-end-regions -Z borrowck-mir
//[mir]compile-flags: -Z borrowck=mir
struct S<X, Y> {
x: X,
@ -19,42 +19,35 @@ struct S<X, Y> {
fn main() {
let x: &&Box<i32>;
let _y = &**x; //[ast]~ ERROR use of possibly uninitialized variable: `**x` [E0381]
//[mir]~^ (Ast) [E0381]
//[mir]~| (Mir) [E0381]
//[mir]~^ [E0381]
let x: &&S<i32, i32>;
let _y = &**x; //[ast]~ ERROR use of possibly uninitialized variable: `**x` [E0381]
//[mir]~^ (Ast) [E0381]
//[mir]~| (Mir) [E0381]
//[mir]~^ [E0381]
let x: &&i32;
let _y = &**x; //[ast]~ ERROR use of possibly uninitialized variable: `**x` [E0381]
//[mir]~^ (Ast) [E0381]
//[mir]~| (Mir) [E0381]
//[mir]~^ [E0381]
let mut a: S<i32, i32>;
a.x = 0;
let _b = &a.x; //[ast]~ ERROR use of possibly uninitialized variable: `a.x` [E0381]
//[mir]~^ ERROR (Ast) [E0381]
// (deliberately *not* an error under MIR-borrowck)
let mut a: S<&&i32, &&i32>;
a.x = &&0;
let _b = &**a.x; //[ast]~ ERROR use of possibly uninitialized variable: `**a.x` [E0381]
//[mir]~^ ERROR (Ast) [E0381]
// (deliberately *not* an error under MIR-borrowck)
let mut a: S<i32, i32>;
a.x = 0;
let _b = &a.y; //[ast]~ ERROR use of possibly uninitialized variable: `a.y` [E0381]
//[mir]~^ ERROR (Ast) [E0381]
//[mir]~| ERROR (Mir) [E0381]
//[mir]~^ ERROR [E0381]
let mut a: S<&&i32, &&i32>;
a.x = &&0;
let _b = &**a.y; //[ast]~ ERROR use of possibly uninitialized variable: `**a.y` [E0381]
//[mir]~^ ERROR (Ast) [E0381]
//[mir]~| ERROR (Mir) [E0381]
//[mir]~^ ERROR [E0381]
}

View File

@ -10,7 +10,7 @@
// ignore-tidy-linelength
// revisions: ast mir
//[mir]compile-flags: -Z emit-end-regions -Z borrowck-mir
//[mir]compile-flags: -Z borrowck=mir
#[derive(Clone, Copy)]
union U {
@ -33,14 +33,12 @@ fn main() {
{
let ra = &u.a;
let rma = &mut u.a; //[ast]~ ERROR cannot borrow `u.a` as mutable because it is also borrowed as immutable
//[mir]~^ ERROR cannot borrow `u.a` as mutable because it is also borrowed as immutable (Ast)
//[mir]~| ERROR cannot borrow `u.a` as mutable because it is also borrowed as immutable (Mir)
//[mir]~^ ERROR cannot borrow `u.a` as mutable because it is also borrowed as immutable
}
{
let ra = &u.a;
u.a = 1; //[ast]~ ERROR cannot assign to `u.a` because it is borrowed
//[mir]~^ ERROR cannot assign to `u.a` because it is borrowed (Ast)
//[mir]~| ERROR cannot assign to `u.a` because it is borrowed (Mir)
//[mir]~^ ERROR cannot assign to `u.a` because it is borrowed
}
// Imm borrow, other field
{
@ -54,63 +52,53 @@ fn main() {
{
let ra = &u.a;
let rmb = &mut u.b; //[ast]~ ERROR cannot borrow `u` (via `u.b`) as mutable because `u` is also borrowed as immutable (via `u.a`)
//[mir]~^ ERROR cannot borrow `u` (via `u.b`) as mutable because `u` is also borrowed as immutable (via `u.a`) (Ast)
// FIXME Error for MIR (needs support for union)
}
{
let ra = &u.a;
u.b = 1; //[ast]~ ERROR cannot assign to `u.b` because it is borrowed
//[mir]~^ ERROR cannot assign to `u.b` because it is borrowed (Ast)
// FIXME Error for MIR (needs support for union)
}
// Mut borrow, same field
{
let rma = &mut u.a;
let ra = &u.a; //[ast]~ ERROR cannot borrow `u.a` as immutable because it is also borrowed as mutable
//[mir]~^ ERROR cannot borrow `u.a` as immutable because it is also borrowed as mutable (Ast)
//[mir]~| ERROR cannot borrow `u.a` as immutable because it is also borrowed as mutable (Mir)
//[mir]~^ ERROR cannot borrow `u.a` as immutable because it is also borrowed as mutable
}
{
let ra = &mut u.a;
let a = u.a; //[ast]~ ERROR cannot use `u.a` because it was mutably borrowed
//[mir]~^ ERROR cannot use `u.a` because it was mutably borrowed (Ast)
//[mir]~| ERROR cannot use `u.a` because it was mutably borrowed (Mir)
//[mir]~^ ERROR cannot use `u.a` because it was mutably borrowed
}
{
let rma = &mut u.a;
let rma2 = &mut u.a; //[ast]~ ERROR cannot borrow `u.a` as mutable more than once at a time
//[mir]~^ ERROR cannot borrow `u.a` as mutable more than once at a time (Ast)
//[mir]~| ERROR cannot borrow `u.a` as mutable more than once at a time (Mir)
//[mir]~^ ERROR cannot borrow `u.a` as mutable more than once at a time
}
{
let rma = &mut u.a;
u.a = 1; //[ast]~ ERROR cannot assign to `u.a` because it is borrowed
//[mir]~^ ERROR cannot assign to `u.a` because it is borrowed (Ast)
//[mir]~| ERROR cannot assign to `u.a` because it is borrowed (Mir)
//[mir]~^ ERROR cannot assign to `u.a` because it is borrowed
}
// Mut borrow, other field
{
let rma = &mut u.a;
let rb = &u.b; //[ast]~ ERROR cannot borrow `u` (via `u.b`) as immutable because `u` is also borrowed as mutable (via `u.a`)
//[mir]~^ ERROR cannot borrow `u` (via `u.b`) as immutable because `u` is also borrowed as mutable (via `u.a`) (Ast)
// FIXME Error for MIR (needs support for union)
}
{
let ra = &mut u.a;
let b = u.b; //[ast]~ ERROR cannot use `u.b` because it was mutably borrowed
//[mir]~^ ERROR cannot use `u.b` because it was mutably borrowed (Ast)
// FIXME Error for MIR (needs support for union)
}
{
let rma = &mut u.a;
let rmb2 = &mut u.b; //[ast]~ ERROR cannot borrow `u` (via `u.b`) as mutable more than once at a time
//[mir]~^ ERROR cannot borrow `u` (via `u.b`) as mutable more than once at a time (Ast)
// FIXME Error for MIR (needs support for union)
}
{
let rma = &mut u.a;
u.b = 1; //[ast]~ ERROR cannot assign to `u.b` because it is borrowed
//[mir]~^ ERROR cannot assign to `u.b` because it is borrowed (Ast)
// FIXME Error for MIR (needs support for union)
}
}

View File

@ -9,18 +9,16 @@
// except according to those terms.
// revisions: ast mir
//[mir]compile-flags: -Z emit-end-regions -Z borrowck-mir
//[mir]compile-flags: -Z borrowck=mir
fn test() {
let w: &mut [isize];
w[5] = 0; //[ast]~ ERROR use of possibly uninitialized variable: `*w` [E0381]
//[mir]~^ ERROR (Ast) [E0381]
//[mir]~| ERROR (Mir) [E0381]
//[mir]~^ ERROR [E0381]
let mut w: &mut [isize];
w[5] = 0; //[ast]~ ERROR use of possibly uninitialized variable: `*w` [E0381]
//[mir]~^ ERROR (Ast) [E0381]
//[mir]~| ERROR (Mir) [E0381]
//[mir]~^ ERROR [E0381]
}
fn main() { test(); }

View File

@ -9,7 +9,7 @@
// except according to those terms.
// revisions: ast mir
//[mir]compile-flags: -Z emit-end-regions -Z borrowck-mir
//[mir]compile-flags: -Z borrowck=mir
// Variation on `borrowck-use-uninitialized-in-cast` in which we do a
// trait cast from an uninitialized source. Issue #20791.
@ -20,6 +20,5 @@ impl Foo for i32 { }
fn main() {
let x: &i32;
let y = x as *const Foo; //[ast]~ ERROR use of possibly uninitialized variable: `*x`
//[mir]~^ ERROR (Ast) [E0381]
//[mir]~| ERROR (Mir) [E0381]
//[mir]~^ ERROR [E0381]
}

View File

@ -9,7 +9,7 @@
// except according to those terms.
// revisions: ast mir
//[mir]compile-flags: -Z emit-end-regions -Z borrowck-mir
//[mir]compile-flags: -Z borrowck=mir
// Check that we detect unused values that are cast to other things.
// The problem was specified to casting to `*`, as creating unsafe
@ -18,6 +18,5 @@
fn main() {
let x: &i32;
let y = x as *const i32; //[ast]~ ERROR use of possibly uninitialized variable: `*x` [E0381]
//[mir]~^ ERROR (Ast) [E0381]
//[mir]~| ERROR (Mir) [E0381]
//[mir]~^ ERROR [E0381]
}

View File

@ -8,8 +8,8 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.
// revisions: ast mir
//[mir]compile-flags: -Z emit-end-regions -Z borrowck-mir
// revisions: ast cmp
//[cmp]compile-flags: -Z borrowck=compare
#![feature(slice_patterns)]
@ -21,7 +21,7 @@ fn main() {
};
println!("t[0]: {}", t[0]);
a[2] = 0; //[ast]~ ERROR cannot assign to `a[..]` because it is borrowed
//[mir]~^ ERROR cannot assign to `a[..]` because it is borrowed (Ast)
//[cmp]~^ ERROR cannot assign to `a[..]` because it is borrowed (Ast)
// FIXME Error for MIR (error missed)
println!("t[0]: {}", t[0]);
t[0];

View File

@ -9,7 +9,7 @@
// except according to those terms.
// revisions: ast mir
//[mir]compile-flags: -Z emit-end-regions -Z borrowck-mir
//[mir]compile-flags: -Z borrowck=mir
// Regression test for #38520. Check that moves of `Foo` are not
// permitted as `Foo` is not copy (even in a static/const
@ -25,11 +25,9 @@ const fn get(x: Foo) -> usize {
const X: Foo = Foo(22);
static Y: usize = get(*&X); //[ast]~ ERROR E0507
//[mir]~^ ERROR (Ast) [E0507]
//[mir]~| ERROR (Mir) [E0507]
//[mir]~^ ERROR [E0507]
const Z: usize = get(*&X); //[ast]~ ERROR E0507
//[mir]~^ ERROR (Ast) [E0507]
//[mir]~| ERROR (Mir) [E0507]
//[mir]~^ ERROR [E0507]
fn main() {
}

View File

@ -9,7 +9,7 @@
// except according to those terms.
// revisions: ast mir
//[mir]compile-flags: -Z emit-end-regions -Z borrowck-mir
//[mir]compile-flags: -Z borrowck=mir
fn borrow_mut<T>(x: &mut T) -> &mut T { x }
fn borrow<T>(x: &T) -> &T { x }
@ -21,8 +21,7 @@ fn double_mut_borrow<T>(x: &mut Box<T>) {
let y = borrow_mut(x);
let z = borrow_mut(x);
//[ast]~^ ERROR cannot borrow `*x` as mutable more than once at a time
//[mir]~^^ ERROR cannot borrow `*x` as mutable more than once at a time (Ast)
//[mir]~| ERROR cannot borrow `*x` as mutable more than once at a time (Mir)
//[mir]~^^ ERROR cannot borrow `*x` as mutable more than once at a time
}
fn double_imm_borrow(x: &mut Box<i32>) {
@ -30,22 +29,19 @@ fn double_imm_borrow(x: &mut Box<i32>) {
let z = borrow(x);
**x += 1;
//[ast]~^ ERROR cannot assign to `**x` because it is borrowed
//[mir]~^^ ERROR cannot assign to `**x` because it is borrowed (Ast)
//[mir]~| ERROR cannot assign to `**x` because it is borrowed (Mir)
//[mir]~^^ ERROR cannot assign to `**x` because it is borrowed
}
fn double_mut_borrow2<T>(x: &mut Box<T>) {
borrow_mut2(x, x);
//[ast]~^ ERROR cannot borrow `*x` as mutable more than once at a time
//[mir]~^^ ERROR cannot borrow `*x` as mutable more than once at a time (Ast)
//[mir]~| ERROR cannot borrow `*x` as mutable more than once at a time (Mir)
//[mir]~^^ ERROR cannot borrow `*x` as mutable more than once at a time
}
fn double_borrow2<T>(x: &mut Box<T>) {
borrow2(x, x);
//[ast]~^ ERROR cannot borrow `*x` as immutable because it is also borrowed as mutable
//[mir]~^^ ERROR cannot borrow `*x` as immutable because it is also borrowed as mutable (Ast)
//[mir]~| ERROR cannot borrow `*x` as immutable because it is also borrowed as mutable (Mir)
//[mir]~^^ ERROR cannot borrow `*x` as immutable because it is also borrowed as mutable
}
pub fn main() {}

View File

@ -12,7 +12,7 @@
// of the output to the region of the input.
// revisions: ast mir
//[mir]compile-flags: -Z emit-end-regions -Z borrowck-mir
//[mir]compile-flags: -Z borrowck=mir
trait FnLike<A,R> {
fn call(&self, arg: A) -> R;
@ -25,8 +25,7 @@ fn call_repeatedly<F>(f: F)
let mut x = 3;
let y = f.call(&x);
x = 5; //[ast]~ ERROR cannot assign
//[mir]~^ ERROR cannot assign to `x` because it is borrowed (Ast)
//[mir]~| ERROR cannot assign to `x` because it is borrowed (Mir)
//[mir]~^ ERROR cannot assign to `x` because it is borrowed
// Result is not stored: can re-assign `x`
let mut x = 3;

View File

@ -9,7 +9,7 @@
// except according to those terms.
// revisions: ast mir
//[mir]compile-flags: -Z emit-end-regions -Z borrowck-mir
//[mir]compile-flags: -Z borrowck=mir
enum Sexpression {
Num(()),
@ -20,15 +20,13 @@ fn causes_ice(mut l: &mut Sexpression) {
loop { match l {
&mut Sexpression::Num(ref mut n) => {},
&mut Sexpression::Cons(ref mut expr) => { //[ast]~ ERROR [E0499]
//[mir]~^ ERROR (Ast) [E0499]
//[mir]~| ERROR (Mir) [E0506]
//[mir]~| ERROR (Mir) [E0499]
//[mir]~^ ERROR [E0506]
//[mir]~| ERROR [E0499]
l = &mut **expr; //[ast]~ ERROR [E0506]
//[mir]~^ ERROR (Ast) [E0506]
//[mir]~| ERROR (Mir) [E0506]
//[mir]~| ERROR (Mir) [E0506]
//[mir]~| ERROR (Mir) [E0499]
//[mir]~| ERROR (Mir) [E0499]
//[mir]~^ ERROR [E0506]
//[mir]~| ERROR [E0506]
//[mir]~| ERROR [E0499]
//[mir]~| ERROR [E0499]
}
}}
}

View File

@ -9,7 +9,7 @@
// except according to those terms.
// revisions: ast mir
//[mir]compile-flags: -Z emit-end-regions -Z borrowck-mir
//[mir]compile-flags: -Z borrowck=mir
use std::cell::RefCell;
@ -23,11 +23,7 @@ fn main() {
//[ast]~| NOTE temporary value dropped here while still borrowed
//[ast]~| NOTE temporary value created here
//[ast]~| NOTE consider using a `let` binding to increase its lifetime
//[mir]~^^^^^ ERROR borrowed value does not live long enough (Ast) [E0597]
//[mir]~| NOTE temporary value dropped here while still borrowed
//[mir]~| NOTE temporary value created here
//[mir]~| NOTE consider using a `let` binding to increase its lifetime
//[mir]~| ERROR borrowed value does not live long enough (Mir) [E0597]
//[mir]~^^^^^ ERROR borrowed value does not live long enough [E0597]
//[mir]~| NOTE temporary value dropped here while still borrowed
//[mir]~| NOTE temporary value created here
//[mir]~| NOTE consider using a `let` binding to increase its lifetime
@ -35,4 +31,3 @@ fn main() {
}
//[ast]~^ NOTE temporary value needs to live until here
//[mir]~^^ NOTE temporary value needs to live until here
//[mir]~| NOTE temporary value needs to live until here

View File

@ -9,7 +9,7 @@
// except according to those terms.
// revisions: ast mir
//[mir]compile-flags: -Z emit-end-regions -Z borrowck-mir
//[mir]compile-flags: -Z borrowck=compare
struct TrieMapIterator<'a> {
node: &'a usize
@ -18,7 +18,7 @@ struct TrieMapIterator<'a> {
fn main() {
let a = 5;
let _iter = TrieMapIterator{node: &a};
_iter.node = & //[ast]~ ERROR cannot assign to immutable field
_iter.node = & //[ast]~ ERROR cannot assign to immutable field `_iter.node`
//[mir]~^ ERROR cannot assign to immutable field `_iter.node` (Ast)
// FIXME Error for MIR
panic!()

View File

@ -9,15 +9,14 @@
// except according to those terms.
// revisions: ast mir
//[mir]compile-flags: -Z emit-end-regions -Z borrowck-mir
//[mir]compile-flags: -Z borrowck=mir
fn main() {
let foo = &mut 1;
let &mut x = foo;
x += 1; //[ast]~ ERROR cannot assign twice to immutable variable
//[mir]~^ ERROR cannot assign twice to immutable variable `x` (Ast)
//[mir]~| ERROR cannot assign twice to immutable variable `x` (Mir)
//[mir]~^ ERROR cannot assign twice to immutable variable `x`
// explicitly mut-ify internals
let &mut mut x = foo;
@ -26,6 +25,5 @@ fn main() {
// check borrowing is detected successfully
let &mut ref x = foo;
*foo += 1; //[ast]~ ERROR cannot assign to `*foo` because it is borrowed
//[mir]~^ ERROR cannot assign to `*foo` because it is borrowed (Ast)
//[mir]~| ERROR cannot assign to `*foo` because it is borrowed (Mir)
//[mir]~^ ERROR cannot assign to `*foo` because it is borrowed
}

View File

@ -9,7 +9,7 @@
// except according to those terms.
// compile-flags:-Zborrowck-mir -Znll
// compile-flags:-Zborrowck=compare -Znll
#![allow(warnings)]
#![feature(rustc_attrs)]

View File

@ -9,7 +9,7 @@
// except according to those terms.
// compile-flags:-Zborrowck-mir -Znll
// compile-flags:-Zborrowck=compare -Znll
#![allow(warnings)]
#![feature(rustc_attrs)]

View File

@ -7,8 +7,9 @@
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
//revisions: ast mir
//[mir] compile-flags: -Z emit-end-regions -Z borrowck-mir -Z nll
//[mir] compile-flags: -Z borrowck=mir -Z nll
#![allow(unused_assignments)]
@ -18,9 +19,8 @@ fn foo() {
let mut x = 22;
let wrapper = Wrap { w: &mut x };
x += 1; //[ast]~ ERROR cannot assign to `x` because it is borrowed [E0506]
//[mir]~^ ERROR cannot assign to `x` because it is borrowed (Ast) [E0506]
//[mir]~^^ ERROR cannot assign to `x` because it is borrowed (Mir) [E0506]
//[mir]~^^^ ERROR cannot use `x` because it was mutably borrowed (Mir) [E0503]
//[mir]~^ ERROR cannot assign to `x` because it is borrowed [E0506]
//[mir]~^^ ERROR cannot use `x` because it was mutably borrowed [E0503]
*wrapper.w += 1;
}

View File

@ -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-mir -Znll
// compile-flags:-Zborrowck=compare -Znll
#![allow(warnings)]
#![feature(rustc_attrs)]

View File

@ -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-mir -Znll
// compile-flags:-Zborrowck=compare -Znll
#![allow(warnings)]
#![feature(rustc_attrs)]

View File

@ -9,7 +9,7 @@
// except according to those terms.
// revisions: ast mir
//[mir]compile-flags: -Z emit-end-regions -Z borrowck-mir
//[mir]compile-flags: -Z borrowck=mir
fn main() {
let a0 = 0;
@ -18,8 +18,7 @@ fn main() {
match (&a1,) {
(&ref b0,) => {
a1 = &f; //[ast]~ ERROR cannot assign
//[mir]~^ ERROR cannot assign to `a1` because it is borrowed (Ast)
//[mir]~| ERROR cannot assign to `a1` because it is borrowed (Mir)
//[mir]~^ ERROR cannot assign to `a1` because it is borrowed
}
}
}

View File

@ -9,7 +9,6 @@
// except according to those terms.
// compile-flags: -Z identify_regions -Z span_free_formats -Z emit-end-regions
// ignore-tidy-linelength
// Unwinding should EndRegion for in-scope borrows: Borrowing via by-ref closure.

View File

@ -8,7 +8,7 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.
// compile-flags: -Z emit-end-regions -Z borrowck-mir
// compile-flags: -Z borrowck=mir
fn guard() -> bool {
false

View File

@ -10,7 +10,7 @@
// error-pattern:panic 1
// revisions: ast mir
//[mir]compile-flags: -Z emit-end-regions -Z borrowck-mir
//[mir]compile-flags: -Z borrowck=mir
fn main() {
let x = 2;

View File

@ -10,9 +10,8 @@
// Test taken from #45641 (https://github.com/rust-lang/rust/issues/45641)
// ignore-tidy-linelength
// revisions: ast mir
//[mir]compile-flags: -Z emit-end-regions -Z borrowck-mir
//[mir]compile-flags: -Z borrowck=mir
static mut Y: u32 = 0;

View File

@ -9,7 +9,7 @@
// except according to those terms.
// revisions: ast mir
//[mir]compile-flags: -Z emit-end-regions -Z borrowck-mir
//[mir]compile-flags: -Z borrowck=mir
// Test file taken from issue 45129 (https://github.com/rust-lang/rust/issues/45129)

View File

@ -12,7 +12,7 @@
// access to the variable, whether that mutable access be used
// for direct assignment or for taking mutable ref. Issue #6801.
// compile-flags: -Z emit-end-regions -Z borrowck-mir
// compile-flags: -Z borrowck=compare
#![feature(box_syntax)]

View File

@ -8,7 +8,7 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.
// compile-flags: -Z borrowck-mir -Z emit-end-regions
// compile-flags: -Z borrowck=compare
fn main() {
let mut x = Box::new(0);

View File

@ -13,7 +13,7 @@
// a variety of errors from the older, AST-based machinery (notably
// borrowck), and then we get the NLL error at the end.
// compile-flags:-Znll -Zborrowck-mir
// compile-flags:-Znll -Zborrowck=compare
struct Map {
}