2019-11-17 23:11:42 -06:00
|
|
|
// Ensure that *any* assignment to the return place of a value with interior mutability
|
|
|
|
// disqualifies it from promotion.
|
|
|
|
|
|
|
|
#![feature(const_if_match)]
|
2019-12-10 23:24:46 -06:00
|
|
|
#![feature(const_loop)]
|
2019-11-17 23:11:42 -06:00
|
|
|
|
|
|
|
use std::cell::Cell;
|
|
|
|
|
|
|
|
const X: Option<Cell<i32>> = {
|
|
|
|
let mut x = None;
|
|
|
|
if false {
|
|
|
|
x = Some(Cell::new(4));
|
|
|
|
}
|
|
|
|
x
|
|
|
|
};
|
|
|
|
|
|
|
|
const Y: Option<Cell<i32>> = {
|
|
|
|
let mut y = Some(Cell::new(4));
|
|
|
|
if true {
|
|
|
|
y = None;
|
|
|
|
}
|
|
|
|
y
|
|
|
|
};
|
|
|
|
|
2019-12-10 23:24:46 -06:00
|
|
|
const Z: Option<Cell<i32>> = {
|
|
|
|
let mut z = None;
|
|
|
|
let mut i = 0;
|
|
|
|
while i < 10 {
|
|
|
|
if i == 8 {
|
|
|
|
z = Some(Cell::new(4));
|
|
|
|
}
|
|
|
|
|
|
|
|
i += 1;
|
|
|
|
}
|
|
|
|
z
|
|
|
|
};
|
|
|
|
|
|
|
|
|
2019-11-17 23:11:42 -06:00
|
|
|
fn main() {
|
|
|
|
let x: &'static _ = &X; //~ ERROR temporary value dropped while borrowed
|
|
|
|
let y: &'static _ = &Y; //~ ERROR temporary value dropped while borrowed
|
2019-12-10 23:24:46 -06:00
|
|
|
let z: &'static _ = &Z; //~ ERROR temporary value dropped while borrowed
|
2019-11-17 23:11:42 -06:00
|
|
|
}
|