blob: 63b65d83f76742778fddaf4673731c853dbdf554 [file] [log] [blame]
//@ run-pass
#![feature(repr_simd, core_intrinsics)]
#[path = "../../../auxiliary/minisimd.rs"]
mod minisimd;
use minisimd::*;
use std::intrinsics::simd::{simd_cast_ptr, simd_expose_provenance, simd_with_exposed_provenance};
type V<T> = Simd<T, 2>;
fn main() {
unsafe {
let mut foo = 4i8;
let ptr = &mut foo as *mut i8;
let ptrs: V::<*mut i8> = Simd([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.into_array() == [ptr as *const u8, core::ptr::null()]);
assert!(exposed_addr.into_array() == [ptr as usize, 0]);
assert!(with_exposed_provenance.into_array() == ptrs.into_array());
}
}