//@ run-pass

#![feature(repr_simd, intrinsics)]

extern "rust-intrinsic" {
    fn simd_cast_ptr<T, U>(x: T) -> U;
    fn simd_expose_provenance<T, U>(x: T) -> U;
    fn simd_with_exposed_provenance<T, U>(x: T) -> U;
}

#[derive(Copy, Clone)]
#[repr(simd)]
struct V<T>([T; 2]);

fn main() {
    unsafe {
        let mut foo = 4i8;
        let ptr = &mut foo as *mut i8;

        let ptrs = V::<*mut i8>([ptr, core::ptr::null_mut()]);

        // change constness and type
        let const_ptrs: V<*const u8> = simd_cast_ptr(ptrs);

        let exposed_addr: V<usize> = simd_expose_provenance(const_ptrs);

        let with_exposed_provenance: V<*mut i8> = simd_with_exposed_provenance(exposed_addr);

        assert!(const_ptrs.0 == [ptr as *const u8, core::ptr::null()]);
        assert!(exposed_addr.0 == [ptr as usize, 0]);
        assert!(with_exposed_provenance.0 == ptrs.0);
    }
}
