]> git.proxmox.com Git - rustc.git/blob - src/test/mir-opt/simplify-locals.rs
New upstream version 1.63.0+dfsg1
[rustc.git] / src / test / mir-opt / simplify-locals.rs
1 // unit-test: SimplifyLocals
2
3 #![feature(box_syntax)]
4 #![feature(thread_local)]
5
6 #[derive(Copy, Clone)]
7 enum E {
8 A,
9 B,
10 }
11
12 // EMIT_MIR simplify_locals.c.SimplifyLocals.diff
13 fn c() {
14 let bytes = [0u8; 10];
15 // Unused cast
16 let _: &[u8] = &bytes;
17 }
18
19 // EMIT_MIR simplify_locals.d1.SimplifyLocals.diff
20 fn d1() {
21 // Unused set discriminant
22 let _ = E::A;
23 }
24
25 // EMIT_MIR simplify_locals.d2.SimplifyLocals.diff
26 fn d2() {
27 // Unused set discriminant
28 {(10, E::A)}.1 = E::B;
29 }
30
31 // EMIT_MIR simplify_locals.r.SimplifyLocals.diff
32 fn r() {
33 let mut a = 1;
34 // Unused references
35 let _ = &a;
36 let _ = &mut a;
37 }
38
39 #[thread_local] static mut X: u32 = 0;
40
41 // EMIT_MIR simplify_locals.t1.SimplifyLocals.diff
42 fn t1() {
43 // Unused thread local
44 unsafe { X };
45 }
46
47 // EMIT_MIR simplify_locals.t2.SimplifyLocals.diff
48 fn t2() {
49 // Unused thread local
50 unsafe { &mut X };
51 }
52
53 // EMIT_MIR simplify_locals.t3.SimplifyLocals.diff
54 fn t3() {
55 // Unused thread local
56 unsafe { *&mut X };
57 }
58
59 // EMIT_MIR simplify_locals.t4.SimplifyLocals.diff
60 fn t4() -> u32 {
61 // Used thread local
62 unsafe { X + 1 }
63 }
64
65 // EMIT_MIR simplify_locals.expose_addr.SimplifyLocals.diff
66 fn expose_addr(p: *const usize) {
67 // Used pointer to address cast. Has a side effect of exposing the provenance.
68 p as usize;
69 }
70
71 fn main() {
72 c();
73 d1();
74 d2();
75 r();
76 t1();
77 t2();
78 t3();
79 t4();
80 expose_addr(&0);
81 }