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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -9,12 +9,11 @@
// except according to those terms. // except according to those terms.
// revisions: ast mir // 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 { fn cplusplus_mode(x: isize) -> &'static isize {
&x //[ast]~ ERROR `x` does not live long enough &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]~| ERROR borrowed value does not live long enough (Mir)
} }
fn main() {} fn main() {}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -10,13 +10,12 @@
// ignore-tidy-linelength // ignore-tidy-linelength
// revisions: ast mir // 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 { fn foo(x: Box<isize>) -> isize {
let y = &*x; let y = &*x;
free(x); //[ast]~ ERROR cannot move out of `x` because it is borrowed 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]~| ERROR cannot move out of `x` because it is borrowed (Mir)
*y *y
} }

View File

@ -9,7 +9,7 @@
// except according to those terms. // except according to those terms.
// revisions: ast mir // 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 // Check that do not allow access to fields of uninitialized or moved
// structs. // structs.
@ -32,18 +32,15 @@ impl Line { fn consume(self) { } }
fn main() { fn main() {
let mut a: Point; let mut a: Point;
let _ = a.x + 1; //[ast]~ ERROR use of possibly uninitialized variable: `a.x` let _ = a.x + 1; //[ast]~ ERROR use of possibly uninitialized variable: `a.x`
//[mir]~^ ERROR [E0381] //[mir]~^ ERROR [E0381]
//[mir]~| ERROR (Mir) [E0381]
let mut line1 = Line::default(); let mut line1 = Line::default();
let _moved = line1.origin; let _moved = line1.origin;
let _ = line1.origin.x + 1; //[ast]~ ERROR use of collaterally moved value: `line1.origin.x` let _ = line1.origin.x + 1; //[ast]~ ERROR use of collaterally moved value: `line1.origin.x`
//[mir]~^ [E0382] //[mir]~^ [E0382]
//[mir]~| (Mir) [E0382]
let mut line2 = Line::default(); let mut line2 = Line::default();
let _moved = (line2.origin, line2.middle); let _moved = (line2.origin, line2.middle);
line2.consume(); //[ast]~ ERROR use of partially moved value: `line2` [E0382] line2.consume(); //[ast]~ ERROR use of partially moved value: `line2` [E0382]
//[mir]~^ [E0382] //[mir]~^ [E0382]
//[mir]~| (Mir) [E0382]
} }

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -12,7 +12,7 @@
// in the type of `p` includes the points after `&v[0]` up to (but not // 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. // including) the call to `use_x`. The `else` branch is not included.
// compile-flags:-Zborrowck-mir -Znll // compile-flags:-Zborrowck=compare -Znll
#![allow(warnings)] #![allow(warnings)]
#![feature(rustc_attrs)] #![feature(rustc_attrs)]

View File

@ -12,7 +12,7 @@
// in the type of `p` includes the points after `&v[0]` up to (but not // 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. // including) the call to `use_x`. The `else` branch is not included.
// compile-flags:-Zborrowck-mir -Znll // compile-flags:-Zborrowck=compare -Znll
#![allow(warnings)] #![allow(warnings)]
#![feature(rustc_attrs)] #![feature(rustc_attrs)]

View File

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

View File

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

View File

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

View File

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

View File

@ -9,7 +9,7 @@
// except according to those terms. // except according to those terms.
// revisions: ast mir // 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) // 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 // access to the variable, whether that mutable access be used
// for direct assignment or for taking mutable ref. Issue #6801. // 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)] #![feature(box_syntax)]

View File

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

View File

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