]> git.lizzy.rs Git - rust.git/blob - tests/mir-opt/simplify_locals.rs
Rollup merge of #107473 - rustbot:docs-update, r=ehuss
[rust.git] / tests / mir-opt / simplify_locals.rs
1 // unit-test: SimplifyLocals-before-const-prop
2
3
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-before-const-prop.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-before-const-prop.diff
20 fn d1() {
21     // Unused set discriminant
22     let _ = E::A;
23 }
24
25 // EMIT_MIR simplify_locals.d2.SimplifyLocals-before-const-prop.diff
26 fn d2() {
27     // Unused set discriminant
28     {(10, E::A)}.1 = E::B;
29 }
30
31 // EMIT_MIR simplify_locals.r.SimplifyLocals-before-const-prop.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-before-const-prop.diff
42 fn t1() {
43     // Unused thread local
44     unsafe { X };
45 }
46
47 // EMIT_MIR simplify_locals.t2.SimplifyLocals-before-const-prop.diff
48 fn t2() {
49     // Unused thread local
50     unsafe { &mut X };
51 }
52
53 // EMIT_MIR simplify_locals.t3.SimplifyLocals-before-const-prop.diff
54 fn t3() {
55     // Unused thread local
56     unsafe { *&mut X };
57 }
58
59 // EMIT_MIR simplify_locals.t4.SimplifyLocals-before-const-prop.diff
60 fn t4() -> u32 {
61     // Used thread local
62     unsafe { X + 1 }
63 }
64
65 // EMIT_MIR simplify_locals.expose_addr.SimplifyLocals-before-const-prop.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 }