2019-11-17 23:11:42 -06:00
|
|
|
// run-pass
|
2020-06-11 17:08:53 -05:00
|
|
|
// revisions: stock precise
|
2019-11-17 23:11:42 -06:00
|
|
|
|
2020-09-27 19:00:00 -05:00
|
|
|
#![allow(unused)]
|
2020-06-11 17:08:53 -05:00
|
|
|
#![cfg_attr(precise, feature(const_precise_live_drops))]
|
2019-11-17 23:11:42 -06:00
|
|
|
|
|
|
|
// `x` is always moved into the final value and is not dropped inside the initializer.
|
|
|
|
const _: Option<Vec<i32>> = {
|
|
|
|
let y: Option<Vec<i32>> = None;
|
|
|
|
let x = Some(Vec::new());
|
|
|
|
|
|
|
|
if true {
|
|
|
|
x
|
|
|
|
} else {
|
|
|
|
x
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
const _: Option<Vec<i32>> = {
|
|
|
|
let x = Some(Vec::new());
|
|
|
|
match () {
|
|
|
|
() => x,
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2019-12-10 23:24:46 -06:00
|
|
|
const _: Option<Vec<i32>> = {
|
|
|
|
let mut some = Some(Vec::new());
|
|
|
|
let mut tmp = None;
|
|
|
|
|
|
|
|
let mut i = 0;
|
|
|
|
while i < 10 {
|
|
|
|
tmp = some;
|
|
|
|
some = None;
|
|
|
|
|
|
|
|
// We can never exit the loop with `Some` in `tmp`.
|
|
|
|
|
|
|
|
some = tmp;
|
|
|
|
tmp = None;
|
|
|
|
|
|
|
|
i += 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
some
|
|
|
|
};
|
|
|
|
|
2019-11-17 23:11:42 -06:00
|
|
|
fn main() {}
|