| //@ run-pass |
| //@ revisions: stock precise |
| |
| #![allow(unused)] |
| #![cfg_attr(precise, feature(const_precise_live_drops))] |
| |
| // `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, |
| } |
| }; |
| |
| 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 |
| }; |
| |
| fn main() {} |