2017-09-26 14:56:37 -05:00
|
|
|
// revisions: ast mir
|
2017-11-19 16:37:59 -06:00
|
|
|
//[mir]compile-flags: -Z borrowck=mir
|
2017-09-26 14:56:37 -05:00
|
|
|
|
2014-10-27 17:37:07 -05:00
|
|
|
#![allow(unused_variables)]
|
|
|
|
#![allow(unused_assignments)]
|
2013-03-15 14:24:24 -05:00
|
|
|
|
|
|
|
fn separate_arms() {
|
|
|
|
// Here both arms perform assignments, but only is illegal.
|
|
|
|
|
|
|
|
let mut x = None;
|
|
|
|
match x {
|
|
|
|
None => {
|
|
|
|
// It is ok to reassign x here, because there is in
|
|
|
|
// fact no outstanding loan of x!
|
2015-01-31 10:23:42 -06:00
|
|
|
x = Some(0);
|
2013-03-15 14:24:24 -05:00
|
|
|
}
|
2018-04-09 04:28:00 -05:00
|
|
|
Some(ref r) => {
|
2017-09-26 14:56:37 -05:00
|
|
|
x = Some(1); //[ast]~ ERROR cannot assign
|
2018-04-09 04:28:00 -05:00
|
|
|
//[mir]~^ ERROR cannot assign to `x` because it is borrowed
|
|
|
|
drop(r);
|
2013-03-15 14:24:24 -05:00
|
|
|
}
|
|
|
|
}
|
2013-07-02 14:47:32 -05:00
|
|
|
x.clone(); // just to prevent liveness warnings
|
2013-03-15 14:24:24 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
fn main() {}
|