about summary refs log tree commit diff
path: root/tests/mir-opt/dead-store-elimination/ref.rs
blob: 2d3200edab9f61447d350831c66a0a211f93a5f1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
//@ test-mir-pass: DeadStoreElimination-initial

pub struct Foo {
    a: i32,
    b: i64,
    c: i32,
}

// EMIT_MIR ref.tuple.DeadStoreElimination-initial.diff
pub fn tuple(v: (i32, &Foo)) -> i32 {
    // CHECK-LABEL: fn tuple
    // CHECK: debug _dead => [[dead:_[0-9]+]];
    // CHECK: bb0:
    // CHECK: DBG: [[dead]] = &((*_3).2: i32)
    let _dead = &v.1.c;
    v.1.a
}

// EMIT_MIR ref.dead_first.DeadStoreElimination-initial.diff
pub fn dead_first(v: &Foo) -> &i32 {
    // CHECK-LABEL: fn dead_first
    // CHECK: debug a => [[var_a:_[0-9]+]];
    // CHECK: bb0:
    // CHECK: DBG: [[var_a]] = &((*_1).2: i32)
    // CHECK: [[tmp_4:_[0-9]+]] = &((*_1).0: i32)
    // CHECK: [[tmp_3:_[0-9]+]] = &(*[[tmp_4]])
    // CHECK: [[var_a]] = move [[tmp_3]]
    let mut a = &v.c;
    a = &v.a;
    a
}