]> git.proxmox.com Git - rustc.git/blob - src/test/ui/consts/control-flow/interior-mutability.rs
New upstream version 1.67.1+dfsg1
[rustc.git] / src / test / ui / consts / control-flow / interior-mutability.rs
1 // Ensure that *any* assignment to the return place of a value with interior mutability
2 // disqualifies it from promotion.
3
4 use std::cell::Cell;
5
6 const X: Option<Cell<i32>> = {
7 let mut x = None;
8 if false {
9 x = Some(Cell::new(4));
10 }
11 x
12 };
13
14 const Y: Option<Cell<i32>> = {
15 let mut y = Some(Cell::new(4));
16 if true {
17 y = None;
18 }
19 y
20 };
21
22 const Z: Option<Cell<i32>> = {
23 let mut z = None;
24 let mut i = 0;
25 while i < 10 {
26 if i == 8 {
27 z = Some(Cell::new(4));
28 }
29
30 if i == 9 {
31 z = None;
32 }
33
34 i += 1;
35 }
36 z
37 };
38
39 fn main() {
40 let x: &'static _ = &X; //~ ERROR temporary value dropped while borrowed
41 let y: &'static _ = &Y; //~ ERROR temporary value dropped while borrowed
42 let z: &'static _ = &Z; //~ ERROR temporary value dropped while borrowed
43 }