#![warn(clippy::mem_replace_with_uninit)]
#![allow(
    // These get removed by the suggestion
    deprecated, // for `std::mem::uninitialized`
    invalid_value,
    clippy::uninit_assumed_init,

    // Added because the suggestion is `std::ptr::read(&mut v)`
    // (which might be considered a bug)
    clippy::unnecessary_mut_passed,
)]

use std::mem;

fn might_panic<X>(x: X) -> X {
    // in practice this would be a possibly-panicky operation
    x
}

fn main() {
    let mut v = vec![0i32; 4];
    // the following is UB if `might_panic` panics
    unsafe {
        let taken_v = std::ptr::read(&mut v);
        //~^ mem_replace_with_uninit

        let new_v = might_panic(taken_v);
        std::mem::forget(mem::replace(&mut v, new_v));
    }

    unsafe {
        let taken_v = std::ptr::read(&mut v);
        //~^ mem_replace_with_uninit

        let new_v = might_panic(taken_v);
        std::mem::forget(mem::replace(&mut v, new_v));
    }

    // this is silly but OK, because usize is a primitive type
    let mut u: usize = 42;
    let uref = &mut u;
    let taken_u = unsafe { mem::replace(uref, mem::zeroed()) };
    *uref = taken_u + 1;

    // this is still not OK, because uninit
    let taken_u = unsafe { std::ptr::read(uref) };
    //~^ mem_replace_with_uninit

    *uref = taken_u + 1;
}
