//@aux-build:macro_rules.rs

#![warn(clippy::missing_transmute_annotations)]
#![allow(clippy::let_with_type_underscore)]

#[macro_use]
extern crate macro_rules;

macro_rules! local_bad_transmute {
    ($e:expr) => {
        std::mem::transmute::<[u16; 2], i32>($e)
        //~^ ERROR: transmute used without annotations
    };
}

fn bar(x: i32) -> i32 {
    x
}

unsafe fn foo1() -> i32 {
    unsafe {
        // Should not warn!
        std::mem::transmute([1u16, 2u16])
    }
}

// Should not warn!
const _: i32 = unsafe { std::mem::transmute([1u16, 2u16]) };

#[repr(i32)]
enum Foo {
    A = 0,
}

unsafe fn foo2() -> i32 {
    unsafe {
        let mut i: i32 = 0;
        i = std::mem::transmute::<[u16; 2], i32>([1u16, 2u16]);
        //~^ ERROR: transmute used without annotations
        i = std::mem::transmute::<[u16; 2], i32>([1u16, 2u16]);
        //~^ ERROR: transmute used without annotations
        i = std::mem::transmute::<[u16; 2], i32>([1u16, 2u16]);
        //~^ ERROR: transmute used without annotations
        i = std::mem::transmute::<[u16; 2], i32>([1u16, 2u16]);
        //~^ ERROR: transmute used without annotations

        let x: i32 = bar(std::mem::transmute::<[u16; 2], i32>([1u16, 2u16]));
        //~^ ERROR: transmute used without annotations
        bar(std::mem::transmute::<[u16; 2], i32>([1u16, 2u16]));
        //~^ ERROR: transmute used without annotations

        i = local_bad_transmute!([1u16, 2u16]);

        // Should not warn.
        i = bad_transmute!([1u16, 2u16]);

        i = std::mem::transmute::<[i16; 2], i32>([0i16, 0i16]);
        //~^ ERROR: transmute used without annotations

        i = std::mem::transmute::<Foo, i32>(Foo::A);
        //~^ ERROR: transmute used without annotations

        i
    }
}

fn main() {
    let x: _ = unsafe { std::mem::transmute::<[u16; 2], i32>([1u16, 2u16]) };
    //~^ ERROR: transmute used without annotations
    unsafe {
        let x: _ = std::mem::transmute::<[u16; 2], i32>([1u16, 2u16]);
        //~^ ERROR: transmute used without annotations

        // Should not warn.
        std::mem::transmute::<[u16; 2], i32>([1u16, 2u16]);
        let x = std::mem::transmute::<[u16; 2], i32>([1u16, 2u16]);
        let x: i32 = std::mem::transmute::<[u16; 2], _>([1u16, 2u16]);
        let x: i32 = std::mem::transmute::<_, i32>([1u16, 2u16]);
        let x: i32 = std::mem::transmute([1u16, 2u16]);
    }
    let x: i32 = unsafe { std::mem::transmute([1u16, 2u16]) };
}
