#![warn(clippy::zero_repeat_side_effects)]
#![allow(
    clippy::unnecessary_operation,
    clippy::useless_vec,
    clippy::needless_late_init,
    clippy::single_match,
    clippy::no_effect // only fires _after_ the fix
)]

fn f() -> i32 {
    println!("side effect");
    10
}

fn main() {
    const N: usize = 0;
    const M: usize = 1;

    // should trigger

    // on arrays
    f();
    let a: [i32; 0] = [];
    //~^ zero_repeat_side_effects
    let mut b;
    f();
    b = [] as [i32; 0];
    //~^ zero_repeat_side_effects

    // on vecs
    // vecs dont support inferring value of consts
    f();
    let c: std::vec::Vec<i32> = vec![];
    //~^ zero_repeat_side_effects
    let d;
    f();
    d = vec![] as std::vec::Vec<i32>;
    //~^ zero_repeat_side_effects

    // for macros
    println!("side effect");
    let e: [(); 0] = [];
    //~^ zero_repeat_side_effects

    // for nested calls
    { f() };
    let g: [i32; 0] = [];
    //~^ zero_repeat_side_effects

    // as function param
    drop({
        f();
        vec![] as std::vec::Vec<i32>
    });
    //~^ zero_repeat_side_effects

    // when singled out/not part of assignment/local
    f();
    vec![] as std::vec::Vec<i32>;
    //~^ zero_repeat_side_effects
    f();
    [] as [i32; 0];
    //~^ zero_repeat_side_effects

    // should not trigger
    let a = [f(); N];
    b = [f(); N];
    [f(); N];

    // on arrays with > 0 repeat
    let a = [f(); 1];
    let a = [f(); M];
    let mut b;
    b = [f(); 1];
    b = [f(); M];

    // on vecs with > 0 repeat
    let c = vec![f(); 1];
    let d;
    d = vec![f(); 1];

    // as function param
    drop(vec![f(); 1]);
}

macro_rules! LEN {
    () => {
        0
    };
}

fn issue_13110() {
    let _data = [f(); LEN!()];
    const LENGTH: usize = LEN!();
    let _data = [f(); LENGTH];
}

// TODO: consider moving the defintion+impl inside `issue_14681`
// once https://github.com/rust-lang/rust/issues/146786 is fixed
#[derive(Clone, Copy)]
struct S;

impl S {
    fn new() -> Self {
        println!("This is a side effect");
        S
    }
}

// should not trigger on non-function calls
fn issue_14681() {
    fn foo<T>(_s: &[Option<T>]) {}

    foo(&[Some(0i64); 0]);
    foo(&[Some(Some(0i64)); 0]);
    foo(&{
        Some(f());
        [] as [std::option::Option<i32>; 0]
    });
    //~^ zero_repeat_side_effects
    foo(&{
        Some(Some(S::new()));
        [] as [std::option::Option<std::option::Option<S>>; 0]
    });
    //~^ zero_repeat_side_effects
}

fn issue_15824() {
    fn f() {}

    match 0 {
        0 => {
            f();
            _ = [] as [(); 0]
        },
        //~^ zero_repeat_side_effects
        _ => {},
    }

    let mut a = [(); 0];
    match 0 {
        0 => {
            f();
            a = [] as [(); 0]
        },
        //~^ zero_repeat_side_effects
        _ => {},
    }
}
