// Test that dead code warnings are issued for superfluous assignments of
// fields or variables to themselves (issue #75356).

//@ ignore-test FIXME(81658, 83171)

//@ check-pass
#![allow(unused_assignments)]
#![warn(dead_code)]

fn main() {
    let mut x = 0;
    x = x;
    //~^ WARNING: useless assignment of variable of type `i32` to itself

    x = (x);
    //~^ WARNING: useless assignment of variable of type `i32` to itself

    x = {x};
    // block expressions don't count as self-assignments


    struct S<'a> { f: &'a str }
    let mut s = S { f: "abc" };
    s = s;
    //~^ WARNING: useless assignment of variable of type `S` to itself

    s.f = s.f;
    //~^ WARNING: useless assignment of field of type `&str` to itself


    struct N0 { x: Box<i32> }
    struct N1 { n: N0 }
    struct N2(N1);
    struct N3 { n: N2 };
    let mut n3 = N3 { n: N2(N1 { n: N0 { x: Box::new(42) } }) };
    n3.n.0.n.x = n3.n.0.n.x;
    //~^ WARNING: useless assignment of field of type `Box<i32>` to itself

    let mut t = (1, ((2, 3, (4, 5)),));
    t.1.0.2.1 = t.1.0.2.1;
    //~^ WARNING: useless assignment of field of type `i32` to itself


    let mut y = 0;
    macro_rules! assign_to_y {
        ($cur:expr) => {{
            y = $cur;
        }};
    }
    assign_to_y!(y);
    // self-assignments in macro expansions are not reported either
}
