// run-pass
-// compile-flags: -Z borrowck=compare
fn test1() {
// from issue 6338
// run-pass
-//compile-flags: -Z borrowck=compare
#![deny(warnings)]
// run-pass
-// compile-flags: -Z borrowck=compare
const ALL_THE_NUMS: [u32; 1] = [
1
// run-pass
#![allow(dead_code)]
-// compile-flags: -Z borrowck=compare
static mut DROP: isize = 0;
static mut DROP_S: isize = 0;
// ignore-emscripten i128 doesn't work
-// compile-flags: -Z borrowck=compare
#![feature(test)]
// run-pass
// ignore-emscripten u128 not supported
-// compile-flags: -Z borrowck=compare
#![feature(test)]
#![allow(dead_code)]
#![allow(unreachable_code)]
#![allow(unused_parens)]
-// compile-flags: -Z borrowck=compare
#![recursion_limit = "256"]
// access to the variable, whether that mutable access be used
// for direct assignment or for taking mutable ref. Issue #6801.
-// compile-flags: -Z borrowck=compare
-
#![feature(box_syntax)]
fn to_fn_mut<F: FnMut()>(f: F) -> F { f }
let mut x = 3;
let c1 = to_fn_mut(|| x = 4);
let c2 = to_fn_mut(|| x = 5); //~ ERROR cannot borrow `x` as mutable more than once
- //~| ERROR cannot borrow `x` as mutable more than once
drop((c1, c2));
}
let mut x = 3;
let c1 = to_fn_mut(|| set(&mut x));
let c2 = to_fn_mut(|| set(&mut x)); //~ ERROR cannot borrow `x` as mutable more than once
- //~| ERROR cannot borrow `x` as mutable more than once
drop((c1, c2));
}
let mut x = 3;
let c1 = to_fn_mut(|| x = 5);
let c2 = to_fn_mut(|| set(&mut x)); //~ ERROR cannot borrow `x` as mutable more than once
- //~| ERROR cannot borrow `x` as mutable more than once
drop((c1, c2));
}
let c1 = to_fn_mut(|| x = 5);
let c2 = to_fn_mut(|| { let _y = to_fn_mut(|| set(&mut x)); }); // (nested closure)
//~^ ERROR cannot borrow `x` as mutable more than once
- //~| ERROR cannot borrow `x` as mutable more than once
drop((c1, c2));
}
let c1 = to_fn_mut(|| set(&mut *x.f));
let c2 = to_fn_mut(|| set(&mut *x.f));
//~^ ERROR cannot borrow `x` as mutable more than once
- //~| ERROR cannot borrow `x` as mutable more than once
drop((c1, c2));
}
-error[E0499]: cannot borrow `x` as mutable more than once at a time (Ast)
- --> $DIR/borrowck-closures-two-mut.rs:14:24
- |
-LL | let c1 = to_fn_mut(|| x = 4);
- | -- - previous borrow occurs due to use of `x` in closure
- | |
- | first mutable borrow occurs here
-LL | let c2 = to_fn_mut(|| x = 5);
- | ^^ - borrow occurs due to use of `x` in closure
- | |
- | second mutable borrow occurs here
-...
-LL | }
- | - first borrow ends here
-
-error[E0499]: cannot borrow `x` as mutable more than once at a time (Ast)
- --> $DIR/borrowck-closures-two-mut.rs:26:24
- |
-LL | let c1 = to_fn_mut(|| set(&mut x));
- | -- - previous borrow occurs due to use of `x` in closure
- | |
- | first mutable borrow occurs here
-LL | let c2 = to_fn_mut(|| set(&mut x));
- | ^^ - borrow occurs due to use of `x` in closure
- | |
- | second mutable borrow occurs here
-...
-LL | }
- | - first borrow ends here
-
-error[E0499]: cannot borrow `x` as mutable more than once at a time (Ast)
- --> $DIR/borrowck-closures-two-mut.rs:34:24
- |
-LL | let c1 = to_fn_mut(|| x = 5);
- | -- - previous borrow occurs due to use of `x` in closure
- | |
- | first mutable borrow occurs here
-LL | let c2 = to_fn_mut(|| set(&mut x));
- | ^^ - borrow occurs due to use of `x` in closure
- | |
- | second mutable borrow occurs here
-...
-LL | }
- | - first borrow ends here
-
-error[E0499]: cannot borrow `x` as mutable more than once at a time (Ast)
- --> $DIR/borrowck-closures-two-mut.rs:42:24
- |
-LL | let c1 = to_fn_mut(|| x = 5);
- | -- - previous borrow occurs due to use of `x` in closure
- | |
- | first mutable borrow occurs here
-LL | let c2 = to_fn_mut(|| { let _y = to_fn_mut(|| set(&mut x)); }); // (nested closure)
- | ^^ - borrow occurs due to use of `x` in closure
- | |
- | second mutable borrow occurs here
-...
-LL | }
- | - first borrow ends here
-
-error[E0499]: cannot borrow `x` as mutable more than once at a time (Ast)
- --> $DIR/borrowck-closures-two-mut.rs:55:24
- |
-LL | let c1 = to_fn_mut(|| set(&mut *x.f));
- | -- - previous borrow occurs due to use of `x` in closure
- | |
- | first mutable borrow occurs here
-LL | let c2 = to_fn_mut(|| set(&mut *x.f));
- | ^^ - borrow occurs due to use of `x` in closure
- | |
- | second mutable borrow occurs here
-...
-LL | }
- | - first borrow ends here
-
-error[E0499]: cannot borrow `x` as mutable more than once at a time (Mir)
- --> $DIR/borrowck-closures-two-mut.rs:14:24
+error[E0499]: cannot borrow `x` as mutable more than once at a time
+ --> $DIR/borrowck-closures-two-mut.rs:12:24
|
LL | let c1 = to_fn_mut(|| x = 4);
| -- - first borrow occurs due to use of `x` in closure
| ^^ - second borrow occurs due to use of `x` in closure
| |
| second mutable borrow occurs here
-LL |
LL | drop((c1, c2));
| -- first borrow later used here
-error[E0499]: cannot borrow `x` as mutable more than once at a time (Mir)
- --> $DIR/borrowck-closures-two-mut.rs:26:24
+error[E0499]: cannot borrow `x` as mutable more than once at a time
+ --> $DIR/borrowck-closures-two-mut.rs:23:24
|
LL | let c1 = to_fn_mut(|| set(&mut x));
| -- - first borrow occurs due to use of `x` in closure
| ^^ - second borrow occurs due to use of `x` in closure
| |
| second mutable borrow occurs here
-LL |
LL | drop((c1, c2));
| -- first borrow later used here
-error[E0499]: cannot borrow `x` as mutable more than once at a time (Mir)
- --> $DIR/borrowck-closures-two-mut.rs:34:24
+error[E0499]: cannot borrow `x` as mutable more than once at a time
+ --> $DIR/borrowck-closures-two-mut.rs:30:24
|
LL | let c1 = to_fn_mut(|| x = 5);
| -- - first borrow occurs due to use of `x` in closure
| ^^ - second borrow occurs due to use of `x` in closure
| |
| second mutable borrow occurs here
-LL |
LL | drop((c1, c2));
| -- first borrow later used here
-error[E0499]: cannot borrow `x` as mutable more than once at a time (Mir)
- --> $DIR/borrowck-closures-two-mut.rs:42:24
+error[E0499]: cannot borrow `x` as mutable more than once at a time
+ --> $DIR/borrowck-closures-two-mut.rs:37:24
|
LL | let c1 = to_fn_mut(|| x = 5);
| -- - first borrow occurs due to use of `x` in closure
| ^^ - second borrow occurs due to use of `x` in closure
| |
| second mutable borrow occurs here
-...
+LL |
LL | drop((c1, c2));
| -- first borrow later used here
-error[E0499]: cannot borrow `x` as mutable more than once at a time (Mir)
- --> $DIR/borrowck-closures-two-mut.rs:55:24
+error[E0499]: cannot borrow `x` as mutable more than once at a time
+ --> $DIR/borrowck-closures-two-mut.rs:49:24
|
LL | let c1 = to_fn_mut(|| set(&mut *x.f));
| -- - first borrow occurs due to use of `x` in closure
| ^^ - second borrow occurs due to use of `x` in closure
| |
| second mutable borrow occurs here
-...
+LL |
LL | drop((c1, c2));
| -- first borrow later used here
-error: aborting due to 10 previous errors
+error: aborting due to 5 previous errors
For more information about this error, try `rustc --explain E0499`.
-// compile-flags: -Z borrowck=compare
-
fn main() {
let mut x = Box::new(0);
let _u = x; // error shouldn't note this move
x = Box::new(1);
drop(x);
- let _ = (1,x); //~ ERROR use of moved value: `x` (Ast)
- //~^ ERROR use of moved value: `x` (Mir)
+ let _ = (1,x); //~ ERROR use of moved value: `x`
}
-error[E0382]: use of moved value: `x` (Ast)
- --> $DIR/borrowck-reinit.rs:8:16
- |
-LL | drop(x);
- | - value moved here
-LL | let _ = (1,x);
- | ^ value used here after move
- |
- = note: move occurs because `x` has type `std::boxed::Box<i32>`, which does not implement the `Copy` trait
-
-error[E0382]: use of moved value: `x` (Mir)
- --> $DIR/borrowck-reinit.rs:8:16
+error[E0382]: use of moved value: `x`
+ --> $DIR/borrowck-reinit.rs:6:16
|
LL | let mut x = Box::new(0);
| ----- move occurs because `x` has type `std::boxed::Box<i32>`, which does not implement the `Copy` trait
LL | let _ = (1,x);
| ^ value used here after move
-error: aborting due to 2 previous errors
+error: aborting due to previous error
For more information about this error, try `rustc --explain E0382`.
-// compile-flags: -Z borrowck=compare
-
fn ok() {
loop {
let _x = 1;
fn fail() {
loop {
let x: i32;
- let _ = x + 1; //~ERROR (Ast) [E0381]
- //~^ ERROR (Mir) [E0381]
+ let _ = x + 1; //~ERROR [E0381]
}
}
-error[E0381]: use of possibly uninitialized variable: `x` (Ast)
- --> $DIR/borrowck-storage-dead.rs:18:17
+error[E0381]: use of possibly uninitialized variable: `x`
+ --> $DIR/borrowck-storage-dead.rs:16:17
|
LL | let _ = x + 1;
| ^ use of possibly uninitialized `x`
-error[E0381]: use of possibly uninitialized variable: `x` (Mir)
- --> $DIR/borrowck-storage-dead.rs:18:17
- |
-LL | let _ = x + 1;
- | ^ use of possibly uninitialized `x`
-
-error: aborting due to 2 previous errors
+error: aborting due to previous error
For more information about this error, try `rustc --explain E0381`.
-//compile-flags: -Z borrowck=compare
-
fn foo(_x: u32) {
_x = 4;
- //~^ ERROR cannot assign to immutable argument `_x` (Mir)
- //~^^ ERROR cannot assign twice to immutable variable `_x` (Ast)
+ //~^ ERROR cannot assign to immutable argument `_x`
}
fn main() {}
-error[E0384]: cannot assign twice to immutable variable `_x` (Ast)
- --> $DIR/immutable-arg.rs:4:5
- |
-LL | fn foo(_x: u32) {
- | -- first assignment to `_x`
-LL | _x = 4;
- | ^^^^^^ cannot assign twice to immutable variable
-
-error[E0384]: cannot assign to immutable argument `_x` (Mir)
- --> $DIR/immutable-arg.rs:4:5
+error[E0384]: cannot assign to immutable argument `_x`
+ --> $DIR/immutable-arg.rs:2:5
|
LL | fn foo(_x: u32) {
| -- help: make this binding mutable: `mut _x`
LL | _x = 4;
| ^^^^^^ cannot assign to immutable argument
-error: aborting due to 2 previous errors
+error: aborting due to previous error
For more information about this error, try `rustc --explain E0384`.
-// compile-flags: -Z borrowck=compare
-
pub fn main(){
let maybe = Some(vec![true, true]);
loop {
if let Some(thing) = maybe {
}
- //~^^ ERROR use of partially moved value: `maybe` (Ast) [E0382]
- //~| ERROR use of moved value: `(maybe as std::prelude::v1::Some).0` (Ast) [E0382]
- //~| ERROR use of moved value (Mir) [E0382]
+ //~^^ ERROR use of moved value [E0382]
}
}
-error[E0382]: use of partially moved value: `maybe` (Ast)
- --> $DIR/issue-41962.rs:7:30
- |
-LL | if let Some(thing) = maybe {
- | ----- ^^^^^ value used here after move
- | |
- | value moved here
- |
- = note: move occurs because the value has type `std::vec::Vec<bool>`, which does not implement the `Copy` trait
-
-error[E0382]: use of moved value: `(maybe as std::prelude::v1::Some).0` (Ast)
- --> $DIR/issue-41962.rs:7:21
- |
-LL | if let Some(thing) = maybe {
- | ^^^^^ value moved here in previous iteration of loop
- |
- = note: move occurs because the value has type `std::vec::Vec<bool>`, which does not implement the `Copy` trait
-
-error[E0382]: use of moved value (Mir)
- --> $DIR/issue-41962.rs:7:21
+error[E0382]: use of moved value
+ --> $DIR/issue-41962.rs:5:21
|
LL | if let Some(thing) = maybe {
| ^^^^^ value moved here, in previous iteration of loop
|
= note: move occurs because value has type `std::vec::Vec<bool>`, which does not implement the `Copy` trait
-error: aborting due to 3 previous errors
+error: aborting due to previous error
For more information about this error, try `rustc --explain E0382`.
-// compile-flags: -Z borrowck=compare
-
#![feature(generators, generator_trait)]
use std::ops::{GeneratorState, Generator};
// `b` and gets extended by region inference.)
let mut b = move || {
let a = &mut 3;
- //~^ ERROR borrow may still be in use when generator yields (Ast)
- //~| ERROR borrow may still be in use when generator yields (Mir)
+ //~^ ERROR borrow may still be in use when generator yields
yield();
println!("{}", a);
};
let a = 3;
{
let b = &a;
- //~^ ERROR borrow may still be in use when generator yields (Ast)
- //~| ERROR borrow may still be in use when generator yields (Mir)
+ //~^ ERROR borrow may still be in use when generator yields
yield();
println!("{}", b);
}
-error[E0626]: borrow may still be in use when generator yields (Ast)
- --> $DIR/yield-while-local-borrowed.rs:15:22
- |
-LL | let a = &mut 3;
- | ^
-...
-LL | yield();
- | ------- possible yield occurs here
-
-error[E0626]: borrow may still be in use when generator yields (Ast)
- --> $DIR/yield-while-local-borrowed.rs:43:22
- |
-LL | let b = &a;
- | ^
-...
-LL | yield();
- | ------- possible yield occurs here
-
-error[E0626]: borrow may still be in use when generator yields (Mir)
- --> $DIR/yield-while-local-borrowed.rs:15:17
+error[E0626]: borrow may still be in use when generator yields
+ --> $DIR/yield-while-local-borrowed.rs:13:17
|
LL | let a = &mut 3;
| ^^^^^^
-...
+LL |
LL | yield();
| ------- possible yield occurs here
-error[E0626]: borrow may still be in use when generator yields (Mir)
- --> $DIR/yield-while-local-borrowed.rs:43:21
+error[E0626]: borrow may still be in use when generator yields
+ --> $DIR/yield-while-local-borrowed.rs:40:21
|
LL | let b = &a;
| ^^
-...
+LL |
LL | yield();
| ------- possible yield occurs here
-error: aborting due to 4 previous errors
+error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0626`.
// compile-pass
#![allow(dead_code)]
-// compile-flags: -Z borrowck=compare
struct Foo(bool);
// Test that assignments to an `&mut` pointer which is found in a
// borrowed (but otherwise non-aliasable) location is illegal.
-// compile-flags: -Z borrowck=compare -C overflow-checks=on
+// compile-flags: -C overflow-checks=on
struct S<'a> {
pointer: &'a mut isize
let mut y = S { pointer: &mut x };
let z = copy_borrowed_ptr(&mut y);
*y.pointer += 1;
- //~^ ERROR cannot assign to `*y.pointer` because it is borrowed (Ast) [E0506]
- //~| ERROR cannot use `*y.pointer` because it was mutably borrowed (Mir) [E0503]
- //~| ERROR cannot assign to `*y.pointer` because it is borrowed (Mir) [E0506]
+ //~^ ERROR cannot use `*y.pointer` because it was mutably borrowed [E0503]
+ //~| ERROR cannot assign to `*y.pointer` because it is borrowed [E0506]
*z.pointer += 1;
}
}
-error[E0506]: cannot assign to `*y.pointer` because it is borrowed (Ast)
- --> $DIR/issue-45697-1.rs:20:9
- |
-LL | let z = copy_borrowed_ptr(&mut y);
- | - borrow of `*y.pointer` occurs here
-LL | *y.pointer += 1;
- | ^^^^^^^^^^^^^^^ assignment to borrowed `*y.pointer` occurs here
-
-error[E0503]: cannot use `*y.pointer` because it was mutably borrowed (Mir)
+error[E0503]: cannot use `*y.pointer` because it was mutably borrowed
--> $DIR/issue-45697-1.rs:20:9
|
LL | let z = copy_borrowed_ptr(&mut y);
LL | *z.pointer += 1;
| --------------- borrow later used here
-error[E0506]: cannot assign to `*y.pointer` because it is borrowed (Mir)
+error[E0506]: cannot assign to `*y.pointer` because it is borrowed
--> $DIR/issue-45697-1.rs:20:9
|
LL | let z = copy_borrowed_ptr(&mut y);
LL | *z.pointer += 1;
| --------------- borrow later used here
-error: aborting due to 3 previous errors
+error: aborting due to 2 previous errors
Some errors have detailed explanations: E0503, E0506.
For more information about an error, try `rustc --explain E0503`.
// Test that assignments to an `&mut` pointer which is found in a
// borrowed (but otherwise non-aliasable) location is illegal.
-// compile-flags: -Z borrowck=compare -C overflow-checks=off
+// compile-flags: -C overflow-checks=off
struct S<'a> {
pointer: &'a mut isize
let mut y = S { pointer: &mut x };
let z = copy_borrowed_ptr(&mut y);
*y.pointer += 1;
- //~^ ERROR cannot assign to `*y.pointer` because it is borrowed (Ast) [E0506]
- //~| ERROR cannot use `*y.pointer` because it was mutably borrowed (Mir) [E0503]
- //~| ERROR cannot assign to `*y.pointer` because it is borrowed (Mir) [E0506]
+ //~^ ERROR cannot use `*y.pointer` because it was mutably borrowed [E0503]
+ //~| ERROR cannot assign to `*y.pointer` because it is borrowed [E0506]
*z.pointer += 1;
}
}
-error[E0506]: cannot assign to `*y.pointer` because it is borrowed (Ast)
- --> $DIR/issue-45697.rs:20:9
- |
-LL | let z = copy_borrowed_ptr(&mut y);
- | - borrow of `*y.pointer` occurs here
-LL | *y.pointer += 1;
- | ^^^^^^^^^^^^^^^ assignment to borrowed `*y.pointer` occurs here
-
-error[E0503]: cannot use `*y.pointer` because it was mutably borrowed (Mir)
+error[E0503]: cannot use `*y.pointer` because it was mutably borrowed
--> $DIR/issue-45697.rs:20:9
|
LL | let z = copy_borrowed_ptr(&mut y);
LL | *z.pointer += 1;
| --------------- borrow later used here
-error[E0506]: cannot assign to `*y.pointer` because it is borrowed (Mir)
+error[E0506]: cannot assign to `*y.pointer` because it is borrowed
--> $DIR/issue-45697.rs:20:9
|
LL | let z = copy_borrowed_ptr(&mut y);
LL | *z.pointer += 1;
| --------------- borrow later used here
-error: aborting due to 3 previous errors
+error: aborting due to 2 previous errors
Some errors have detailed explanations: E0503, E0506.
For more information about an error, try `rustc --explain E0503`.
-// compile-flags: -Z borrowck=compare
-
fn main() {
let y = {
let mut z = 0;
&mut z
};
- //~^^ ERROR `z` does not live long enough (Ast) [E0597]
- //~| ERROR `z` does not live long enough (Mir) [E0597]
+ //~^^ ERROR `z` does not live long enough [E0597]
println!("{}", y);
}
-error[E0597]: `z` does not live long enough (Ast)
- --> $DIR/issue-46471-1.rs:6:14
- |
-LL | &mut z
- | ^ borrowed value does not live long enough
-LL | };
- | - `z` dropped here while still borrowed
-...
-LL | }
- | - borrowed value needs to live until here
-
-error[E0597]: `z` does not live long enough (Mir)
- --> $DIR/issue-46471-1.rs:6:9
+error[E0597]: `z` does not live long enough
+ --> $DIR/issue-46471-1.rs:4:9
|
LL | &mut z
| ^^^^^^
LL | };
| - `z` dropped here while still borrowed
-error: aborting due to 2 previous errors
+error: aborting due to previous error
For more information about this error, try `rustc --explain E0597`.
-// compile-flags: -Z borrowck=compare
-
fn foo() -> &'static u32 {
let x = 0;
&x
- //~^ ERROR `x` does not live long enough (Ast) [E0597]
- //~| ERROR cannot return reference to local variable `x` (Mir) [E0515]
+ //~^ ERROR cannot return reference to local variable `x` [E0515]
}
fn main() { }
-error[E0597]: `x` does not live long enough (Ast)
- --> $DIR/issue-46471.rs:5:6
- |
-LL | &x
- | ^ borrowed value does not live long enough
-...
-LL | }
- | - borrowed value only lives until here
- |
- = note: borrowed value must be valid for the static lifetime...
-
-error[E0515]: cannot return reference to local variable `x` (Mir)
- --> $DIR/issue-46471.rs:5:5
+error[E0515]: cannot return reference to local variable `x`
+ --> $DIR/issue-46471.rs:3:5
|
LL | &x
| ^^ returns a reference to data owned by the current function
-error: aborting due to 2 previous errors
+error: aborting due to previous error
-Some errors have detailed explanations: E0515, E0597.
-For more information about an error, try `rustc --explain E0515`.
+For more information about this error, try `rustc --explain E0515`.
-// compile-flags: -Z borrowck=compare
-
fn bar<'a>() -> &'a mut u32 {
&mut 4
- //~^ ERROR borrowed value does not live long enough (Ast) [E0597]
- //~| ERROR cannot return reference to temporary value (Mir) [E0515]
+ //~^ ERROR cannot return reference to temporary value [E0515]
}
fn main() { }
-error[E0597]: borrowed value does not live long enough (Ast)
- --> $DIR/issue-46472.rs:4:10
- |
-LL | &mut 4
- | ^ temporary value does not live long enough
-...
-LL | }
- | - temporary value only lives until here
- |
-note: borrowed value must be valid for the lifetime 'a as defined on the function body at 3:8...
- --> $DIR/issue-46472.rs:3:8
- |
-LL | fn bar<'a>() -> &'a mut u32 {
- | ^^
-
-error[E0515]: cannot return reference to temporary value (Mir)
- --> $DIR/issue-46472.rs:4:5
+error[E0515]: cannot return reference to temporary value
+ --> $DIR/issue-46472.rs:2:5
|
LL | &mut 4
| ^^^^^-
| | temporary value created here
| returns a reference to data owned by the current function
-error: aborting due to 2 previous errors
+error: aborting due to previous error
-Some errors have detailed explanations: E0515, E0597.
-For more information about an error, try `rustc --explain E0515`.
+For more information about this error, try `rustc --explain E0515`.
-// FIXME: Change to UI Test
// Check notes are placed on an assignment that can actually precede the current assignment
// Don't emit a first assignment for assignment in a loop.
-// compile-flags: -Zborrowck=compare
-
fn test() {
let x;
if true {
x = 1;
} else {
x = 2;
- x = 3; //~ ERROR (Ast) [E0384]
- //~^ ERROR (Mir) [E0384]
+ x = 3; //~ ERROR [E0384]
}
}
x = 1;
} else {
x = 2;
- x = 3; //~ ERROR (Ast) [E0384]
- //~^ ERROR (Mir) [E0384]
+ x = 3; //~ ERROR [E0384]
}
}
}
let x;
loop {
if true {
- x = 1; //~ ERROR (Ast) [E0384]
- //~^ ERROR (Mir) [E0384]
+ x = 1; //~ ERROR [E0384]
} else {
- x = 2; //~ ERROR (Ast) [E0384]
- //~^ ERROR (Mir) [E0384]
+ x = 2; //~ ERROR [E0384]
}
}
}
-error[E0384]: cannot assign twice to immutable variable `x` (Ast)
- --> $DIR/liveness-assign-imm-local-notes.rs:13:9
- |
-LL | x = 2;
- | ----- first assignment to `x`
-LL | x = 3;
- | ^^^^^ cannot assign twice to immutable variable
-
-error[E0384]: cannot assign twice to immutable variable `x` (Ast)
- --> $DIR/liveness-assign-imm-local-notes.rs:25:13
- |
-LL | x = 2;
- | ----- first assignment to `x`
-LL | x = 3;
- | ^^^^^ cannot assign twice to immutable variable
-
-error[E0384]: cannot assign twice to immutable variable `x` (Ast)
- --> $DIR/liveness-assign-imm-local-notes.rs:35:13
- |
-LL | x = 1;
- | ^^^^^ cannot assign twice to immutable variable
-
-error[E0384]: cannot assign twice to immutable variable `x` (Ast)
- --> $DIR/liveness-assign-imm-local-notes.rs:38:13
- |
-LL | x = 1;
- | ----- first assignment to `x`
-...
-LL | x = 2;
- | ^^^^^ cannot assign twice to immutable variable
-
-error[E0384]: cannot assign twice to immutable variable `x` (Mir)
- --> $DIR/liveness-assign-imm-local-notes.rs:13:9
+error[E0384]: cannot assign twice to immutable variable `x`
+ --> $DIR/liveness-assign-imm-local-notes.rs:10:9
|
LL | let x;
| - help: make this binding mutable: `mut x`
LL | x = 3;
| ^^^^^ cannot assign twice to immutable variable
-error[E0384]: cannot assign twice to immutable variable `x` (Mir)
- --> $DIR/liveness-assign-imm-local-notes.rs:25:13
+error[E0384]: cannot assign twice to immutable variable `x`
+ --> $DIR/liveness-assign-imm-local-notes.rs:21:13
|
LL | let x;
| - help: make this binding mutable: `mut x`
LL | x = 3;
| ^^^^^ cannot assign twice to immutable variable
-error[E0384]: cannot assign twice to immutable variable `x` (Mir)
- --> $DIR/liveness-assign-imm-local-notes.rs:35:13
+error[E0384]: cannot assign twice to immutable variable `x`
+ --> $DIR/liveness-assign-imm-local-notes.rs:30:13
|
LL | let x;
| - help: make this binding mutable: `mut x`
LL | x = 1;
| ^^^^^ cannot assign twice to immutable variable
-error[E0384]: cannot assign twice to immutable variable `x` (Mir)
- --> $DIR/liveness-assign-imm-local-notes.rs:38:13
+error[E0384]: cannot assign twice to immutable variable `x`
+ --> $DIR/liveness-assign-imm-local-notes.rs:32:13
|
LL | let x;
| - help: make this binding mutable: `mut x`
...
LL | x = 1;
| ----- first assignment to `x`
-...
+LL | } else {
LL | x = 2;
| ^^^^^ cannot assign twice to immutable variable
-error: aborting due to 8 previous errors
+error: aborting due to 4 previous errors
For more information about this error, try `rustc --explain E0384`.
#![feature(box_syntax)]
-// compile-flags: -Z borrowck=compare
-
fn dup(x: Box<isize>) -> Box<(Box<isize>,Box<isize>)> {
box (x, x)
- //~^ use of moved value: `x` (Ast) [E0382]
- //~| use of moved value: `x` (Mir) [E0382]
+ //~^ use of moved value: `x` [E0382]
}
fn main() {
-error[E0382]: use of moved value: `x` (Ast)
- --> $DIR/moves-based-on-type-tuple.rs:6:13
- |
-LL | box (x, x)
- | - ^ value used here after move
- | |
- | value moved here
- |
- = note: move occurs because `x` has type `std::boxed::Box<isize>`, which does not implement the `Copy` trait
-
-error[E0382]: use of moved value: `x` (Mir)
- --> $DIR/moves-based-on-type-tuple.rs:6:13
+error[E0382]: use of moved value: `x`
+ --> $DIR/moves-based-on-type-tuple.rs:4:13
|
LL | fn dup(x: Box<isize>) -> Box<(Box<isize>,Box<isize>)> {
| - move occurs because `x` has type `std::boxed::Box<isize>`, which does not implement the `Copy` trait
| |
| value moved here
-error: aborting due to 2 previous errors
+error: aborting due to previous error
For more information about this error, try `rustc --explain E0382`.
// a variety of errors from the older, AST-based machinery (notably
// borrowck), and then we get the NLL error at the end.
-// compile-flags:-Zborrowck=compare
-
struct Map {
}
}
None => {
map.set(String::new()); // Ideally, this would not error.
- //~^ ERROR borrowed as immutable (Ast)
- //~| ERROR borrowed as immutable (Mir)
+ //~^ ERROR borrowed as immutable
}
}
}
match map.get() {
Some(v) => {
map.set(String::new()); // Both AST and MIR error here
- //~^ ERROR borrowed as immutable (Mir)
- //~| ERROR borrowed as immutable (Ast)
+ //~^ ERROR borrowed as immutable
return v;
}
None => {
map.set(String::new()); // Ideally, just AST would error here
- //~^ ERROR borrowed as immutable (Ast)
- //~| ERROR borrowed as immutable (Mir)
+ //~^ ERROR borrowed as immutable
}
}
}
-error[E0502]: cannot borrow `*map` as mutable because it is also borrowed as immutable (Ast)
- --> $DIR/get_default.rs:23:17
- |
-LL | match map.get() {
- | --- immutable borrow occurs here
-...
-LL | map.set(String::new()); // Ideally, this would not error.
- | ^^^ mutable borrow occurs here
-...
-LL | }
- | - immutable borrow ends here
-
-error[E0502]: cannot borrow `*map` as mutable because it is also borrowed as immutable (Ast)
- --> $DIR/get_default.rs:35:17
- |
-LL | match map.get() {
- | --- immutable borrow occurs here
-LL | Some(v) => {
-LL | map.set(String::new()); // Both AST and MIR error here
- | ^^^ mutable borrow occurs here
-...
-LL | }
- | - immutable borrow ends here
-
-error[E0502]: cannot borrow `*map` as mutable because it is also borrowed as immutable (Ast)
- --> $DIR/get_default.rs:41:17
- |
-LL | match map.get() {
- | --- immutable borrow occurs here
-...
-LL | map.set(String::new()); // Ideally, just AST would error here
- | ^^^ mutable borrow occurs here
-...
-LL | }
- | - immutable borrow ends here
-
-error[E0502]: cannot borrow `*map` as mutable because it is also borrowed as immutable (Mir)
- --> $DIR/get_default.rs:23:17
+error[E0502]: cannot borrow `*map` as mutable because it is also borrowed as immutable
+ --> $DIR/get_default.rs:21:17
|
LL | fn ok(map: &mut Map) -> &String {
| - let's call the lifetime of this reference `'1`
| - returning this value requires that `*map` is borrowed for `'1`
...
LL | map.set(String::new()); // Ideally, this would not error.
- | ^^^ mutable borrow occurs here
+ | ^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
-error[E0502]: cannot borrow `*map` as mutable because it is also borrowed as immutable (Mir)
- --> $DIR/get_default.rs:35:17
+error[E0502]: cannot borrow `*map` as mutable because it is also borrowed as immutable
+ --> $DIR/get_default.rs:32:17
|
LL | fn err(map: &mut Map) -> &String {
| - let's call the lifetime of this reference `'1`
| --- immutable borrow occurs here
LL | Some(v) => {
LL | map.set(String::new()); // Both AST and MIR error here
- | ^^^ mutable borrow occurs here
-...
+ | ^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
+LL |
LL | return v;
| - returning this value requires that `*map` is borrowed for `'1`
-error[E0502]: cannot borrow `*map` as mutable because it is also borrowed as immutable (Mir)
- --> $DIR/get_default.rs:41:17
+error[E0502]: cannot borrow `*map` as mutable because it is also borrowed as immutable
+ --> $DIR/get_default.rs:37:17
|
LL | fn err(map: &mut Map) -> &String {
| - let's call the lifetime of this reference `'1`
| - returning this value requires that `*map` is borrowed for `'1`
...
LL | map.set(String::new()); // Ideally, just AST would error here
- | ^^^ mutable borrow occurs here
+ | ^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
-error: aborting due to 6 previous errors
+error: aborting due to 3 previous errors
For more information about this error, try `rustc --explain E0502`.
-// compile-flags:-Zborrowck=compare
-
#![allow(warnings)]
#![feature(rustc_attrs)]
let c = &mut data.0;
capitalize(c);
data.0 = 'e';
- //~^ ERROR (Ast) [E0506]
- //~| ERROR (Mir) [E0506]
+ //~^ ERROR [E0506]
data.0 = 'f';
- //~^ ERROR (Ast) [E0506]
data.0 = 'g';
- //~^ ERROR (Ast) [E0506]
capitalize(c);
}
let c = &mut data.0;
capitalize(c);
data.0 = 'e';
- //~^ ERROR (Ast) [E0506]
data.0 = 'f';
- //~^ ERROR (Ast) [E0506]
data.0 = 'g';
- //~^ ERROR (Ast) [E0506]
}
fn capitalize(_: &mut char) {
-error[E0506]: cannot assign to `data.0` because it is borrowed (Ast)
- --> $DIR/loan_ends_mid_block_pair.rs:14:5
- |
-LL | let c = &mut data.0;
- | ------ borrow of `data.0` occurs here
-LL | capitalize(c);
-LL | data.0 = 'e';
- | ^^^^^^^^^^^^ assignment to borrowed `data.0` occurs here
-
-error[E0506]: cannot assign to `data.0` because it is borrowed (Ast)
- --> $DIR/loan_ends_mid_block_pair.rs:17:5
- |
-LL | let c = &mut data.0;
- | ------ borrow of `data.0` occurs here
-...
-LL | data.0 = 'f';
- | ^^^^^^^^^^^^ assignment to borrowed `data.0` occurs here
-
-error[E0506]: cannot assign to `data.0` because it is borrowed (Ast)
- --> $DIR/loan_ends_mid_block_pair.rs:19:5
- |
-LL | let c = &mut data.0;
- | ------ borrow of `data.0` occurs here
-...
-LL | data.0 = 'g';
- | ^^^^^^^^^^^^ assignment to borrowed `data.0` occurs here
-
-error[E0506]: cannot assign to `data.0` because it is borrowed (Ast)
- --> $DIR/loan_ends_mid_block_pair.rs:28:5
- |
-LL | let c = &mut data.0;
- | ------ borrow of `data.0` occurs here
-LL | capitalize(c);
-LL | data.0 = 'e';
- | ^^^^^^^^^^^^ assignment to borrowed `data.0` occurs here
-
-error[E0506]: cannot assign to `data.0` because it is borrowed (Ast)
- --> $DIR/loan_ends_mid_block_pair.rs:30:5
- |
-LL | let c = &mut data.0;
- | ------ borrow of `data.0` occurs here
-...
-LL | data.0 = 'f';
- | ^^^^^^^^^^^^ assignment to borrowed `data.0` occurs here
-
-error[E0506]: cannot assign to `data.0` because it is borrowed (Ast)
- --> $DIR/loan_ends_mid_block_pair.rs:32:5
- |
-LL | let c = &mut data.0;
- | ------ borrow of `data.0` occurs here
-...
-LL | data.0 = 'g';
- | ^^^^^^^^^^^^ assignment to borrowed `data.0` occurs here
-
-error[E0506]: cannot assign to `data.0` because it is borrowed (Mir)
- --> $DIR/loan_ends_mid_block_pair.rs:14:5
+error[E0506]: cannot assign to `data.0` because it is borrowed
+ --> $DIR/loan_ends_mid_block_pair.rs:12:5
|
LL | let c = &mut data.0;
| ----------- borrow of `data.0` occurs here
LL | capitalize(c);
| - borrow later used here
-error: aborting due to 7 previous errors
+error: aborting due to previous error
For more information about this error, try `rustc --explain E0506`.
-// compile-flags:-Zborrowck=compare
-
#![allow(warnings)]
#![feature(rustc_attrs)]
let slice = &mut data;
capitalize(slice);
data.push('d');
- //~^ ERROR (Ast) [E0499]
- //~| ERROR (Mir) [E0499]
+ //~^ ERROR [E0499]
data.push('e');
- //~^ ERROR (Ast) [E0499]
- //~| ERROR (Mir) [E0499]
+ //~^ ERROR [E0499]
data.push('f');
- //~^ ERROR (Ast) [E0499]
- //~| ERROR (Mir) [E0499]
+ //~^ ERROR [E0499]
capitalize(slice);
}
let slice = &mut data;
capitalize(slice);
data.push('d');
- //~^ ERROR (Ast) [E0499]
data.push('e');
- //~^ ERROR (Ast) [E0499]
data.push('f');
- //~^ ERROR (Ast) [E0499]
}
fn capitalize(_: &mut [char]) {
-error[E0499]: cannot borrow `data` as mutable more than once at a time (Ast)
- --> $DIR/loan_ends_mid_block_vec.rs:13:5
- |
-LL | let slice = &mut data;
- | ---- first mutable borrow occurs here
-LL | capitalize(slice);
-LL | data.push('d');
- | ^^^^ second mutable borrow occurs here
-...
-LL | }
- | - first borrow ends here
-
-error[E0499]: cannot borrow `data` as mutable more than once at a time (Ast)
- --> $DIR/loan_ends_mid_block_vec.rs:16:5
- |
-LL | let slice = &mut data;
- | ---- first mutable borrow occurs here
-...
-LL | data.push('e');
- | ^^^^ second mutable borrow occurs here
-...
-LL | }
- | - first borrow ends here
-
-error[E0499]: cannot borrow `data` as mutable more than once at a time (Ast)
- --> $DIR/loan_ends_mid_block_vec.rs:19:5
- |
-LL | let slice = &mut data;
- | ---- first mutable borrow occurs here
-...
-LL | data.push('f');
- | ^^^^ second mutable borrow occurs here
-...
-LL | }
- | - first borrow ends here
-
-error[E0499]: cannot borrow `data` as mutable more than once at a time (Ast)
- --> $DIR/loan_ends_mid_block_vec.rs:29:5
- |
-LL | let slice = &mut data;
- | ---- first mutable borrow occurs here
-LL | capitalize(slice);
-LL | data.push('d');
- | ^^^^ second mutable borrow occurs here
-...
-LL | }
- | - first borrow ends here
-
-error[E0499]: cannot borrow `data` as mutable more than once at a time (Ast)
- --> $DIR/loan_ends_mid_block_vec.rs:31:5
- |
-LL | let slice = &mut data;
- | ---- first mutable borrow occurs here
-...
-LL | data.push('e');
- | ^^^^ second mutable borrow occurs here
-...
-LL | }
- | - first borrow ends here
-
-error[E0499]: cannot borrow `data` as mutable more than once at a time (Ast)
- --> $DIR/loan_ends_mid_block_vec.rs:33:5
- |
-LL | let slice = &mut data;
- | ---- first mutable borrow occurs here
-...
-LL | data.push('f');
- | ^^^^ second mutable borrow occurs here
-LL |
-LL | }
- | - first borrow ends here
-
-error[E0499]: cannot borrow `data` as mutable more than once at a time (Mir)
- --> $DIR/loan_ends_mid_block_vec.rs:13:5
+error[E0499]: cannot borrow `data` as mutable more than once at a time
+ --> $DIR/loan_ends_mid_block_vec.rs:11:5
|
LL | let slice = &mut data;
| --------- first mutable borrow occurs here
LL | capitalize(slice);
| ----- first borrow later used here
-error[E0499]: cannot borrow `data` as mutable more than once at a time (Mir)
- --> $DIR/loan_ends_mid_block_vec.rs:16:5
+error[E0499]: cannot borrow `data` as mutable more than once at a time
+ --> $DIR/loan_ends_mid_block_vec.rs:13:5
|
LL | let slice = &mut data;
| --------- first mutable borrow occurs here
LL | capitalize(slice);
| ----- first borrow later used here
-error[E0499]: cannot borrow `data` as mutable more than once at a time (Mir)
- --> $DIR/loan_ends_mid_block_vec.rs:19:5
+error[E0499]: cannot borrow `data` as mutable more than once at a time
+ --> $DIR/loan_ends_mid_block_vec.rs:15:5
|
LL | let slice = &mut data;
| --------- first mutable borrow occurs here
...
LL | data.push('f');
| ^^^^ second mutable borrow occurs here
-...
+LL |
LL | capitalize(slice);
| ----- first borrow later used here
-error: aborting due to 9 previous errors
+error: aborting due to 3 previous errors
For more information about this error, try `rustc --explain E0499`.
// in the type of `p` includes the points after `&v[0]` up to (but not
// including) the call to `use_x`. The `else` branch is not included.
-// compile-flags:-Zborrowck=compare
-
#![allow(warnings)]
#![feature(rustc_attrs)]
let value = &my_struct.field;
if value.is_empty() {
my_struct.field.push_str("Hello, world!");
- //~^ ERROR (Ast) [E0502]
}
}
let value = &my_struct.field;
if value.is_empty() {
my_struct.field.push_str("Hello, world!");
- //~^ ERROR (Ast) [E0502]
- //~| ERROR (Mir) [E0502]
+ //~^ ERROR [E0502]
}
drop(value);
}
-error[E0502]: cannot borrow `my_struct.field` as mutable because it is also borrowed as immutable (Ast)
- --> $DIR/region-ends-after-if-condition.rs:19:9
- |
-LL | let value = &my_struct.field;
- | --------------- immutable borrow occurs here
-LL | if value.is_empty() {
-LL | my_struct.field.push_str("Hello, world!");
- | ^^^^^^^^^^^^^^^ mutable borrow occurs here
-...
-LL | }
- | - immutable borrow ends here
-
-error[E0502]: cannot borrow `my_struct.field` as mutable because it is also borrowed as immutable (Ast)
- --> $DIR/region-ends-after-if-condition.rs:29:9
- |
-LL | let value = &my_struct.field;
- | --------------- immutable borrow occurs here
-LL | if value.is_empty() {
-LL | my_struct.field.push_str("Hello, world!");
- | ^^^^^^^^^^^^^^^ mutable borrow occurs here
-...
-LL | }
- | - immutable borrow ends here
-
-error[E0502]: cannot borrow `my_struct.field` as mutable because it is also borrowed as immutable (Mir)
- --> $DIR/region-ends-after-if-condition.rs:29:9
+error[E0502]: cannot borrow `my_struct.field` as mutable because it is also borrowed as immutable
+ --> $DIR/region-ends-after-if-condition.rs:26:9
|
LL | let value = &my_struct.field;
| ---------------- immutable borrow occurs here
LL | if value.is_empty() {
LL | my_struct.field.push_str("Hello, world!");
- | ^^^^^^^^^^^^^^^ mutable borrow occurs here
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
...
LL | drop(value);
| ----- immutable borrow later used here
-error: aborting due to 3 previous errors
+error: aborting due to previous error
For more information about this error, try `rustc --explain E0502`.
// in the type of `p` includes the points after `&v[0]` up to (but not
// including) the call to `use_x`. The `else` branch is not included.
-// compile-flags:-Zborrowck=compare
-
#![allow(warnings)]
#![feature(rustc_attrs)]
let value = &mut my_struct.field;
loop {
my_struct.field.push_str("Hello, world!");
- //~^ ERROR (Ast) [E0499]
- //~| ERROR (Mir) [E0499]
+ //~^ ERROR [E0499]
value.len();
return;
}
let value = &mut my_struct.field;
loop {
my_struct.field.push_str("Hello, world!");
- //~^ ERROR (Ast) [E0499]
return;
}
}
-error[E0499]: cannot borrow `my_struct.field` as mutable more than once at a time (Ast)
- --> $DIR/return_from_loop.rs:22:9
- |
-LL | let value = &mut my_struct.field;
- | --------------- first mutable borrow occurs here
-LL | loop {
-LL | my_struct.field.push_str("Hello, world!");
- | ^^^^^^^^^^^^^^^ second mutable borrow occurs here
-...
-LL | }
- | - first borrow ends here
-
-error[E0499]: cannot borrow `my_struct.field` as mutable more than once at a time (Ast)
- --> $DIR/return_from_loop.rs:35:9
- |
-LL | let value = &mut my_struct.field;
- | --------------- first mutable borrow occurs here
-LL | loop {
-LL | my_struct.field.push_str("Hello, world!");
- | ^^^^^^^^^^^^^^^ second mutable borrow occurs here
-...
-LL | }
- | - first borrow ends here
-
-error[E0499]: cannot borrow `my_struct.field` as mutable more than once at a time (Mir)
- --> $DIR/return_from_loop.rs:22:9
+error[E0499]: cannot borrow `my_struct.field` as mutable more than once at a time
+ --> $DIR/return_from_loop.rs:20:9
|
LL | let value = &mut my_struct.field;
| -------------------- first mutable borrow occurs here
LL | loop {
LL | my_struct.field.push_str("Hello, world!");
| ^^^^^^^^^^^^^^^ second mutable borrow occurs here
-...
+LL |
LL | value.len();
| ----- first borrow later used here
-error: aborting due to 3 previous errors
+error: aborting due to previous error
For more information about this error, try `rustc --explain E0499`.