// Copyright Kani Contributors // SPDX-License-Identifier: Apache-2.0 OR MIT // Check that we get the expected results for the `pref_align_of` intrinsic // with common data types #![feature(core_intrinsics)] use std::intrinsics::pref_align_of; struct MyStruct {} enum MyEnum {} #[kani::proof] fn main() { #[cfg(target_arch = "x86_64")] { // Scalar types assert!(unsafe { pref_align_of::() } == 1); assert!(unsafe { pref_align_of::() } == 2); assert!(unsafe { pref_align_of::() } == 4); assert!(unsafe { pref_align_of::() } == 8); assert!(unsafe { pref_align_of::() } == 8); assert!(unsafe { pref_align_of::() } == 8); assert!(unsafe { pref_align_of::() } == 1); assert!(unsafe { pref_align_of::() } == 2); assert!(unsafe { pref_align_of::() } == 4); assert!(unsafe { pref_align_of::() } == 8); assert!(unsafe { pref_align_of::() } == 8); assert!(unsafe { pref_align_of::() } == 8); assert!(unsafe { pref_align_of::() } == 4); assert!(unsafe { pref_align_of::() } == 8); assert!(unsafe { pref_align_of::() } == 1); assert!(unsafe { pref_align_of::() } == 4); // Compound types (tuple and array) assert!(unsafe { pref_align_of::<(i32, i32)>() } == 8); assert!(unsafe { pref_align_of::<[i32; 5]>() } == 4); // Custom data types (struct and enum) assert!(unsafe { pref_align_of::() } == 8); assert!(unsafe { pref_align_of::() } == 1); } #[cfg(target_arch = "aarch64")] { // Scalar types assert!(unsafe { pref_align_of::() } == 1); assert!(unsafe { pref_align_of::() } == 2); assert!(unsafe { pref_align_of::() } == 4); assert!(unsafe { pref_align_of::() } == 8); assert!(unsafe { pref_align_of::() } == 16); assert!(unsafe { pref_align_of::() } == 8); assert!(unsafe { pref_align_of::() } == 1); assert!(unsafe { pref_align_of::() } == 2); assert!(unsafe { pref_align_of::() } == 4); assert!(unsafe { pref_align_of::() } == 8); assert!(unsafe { pref_align_of::() } == 16); assert!(unsafe { pref_align_of::() } == 8); assert!(unsafe { pref_align_of::() } == 4); assert!(unsafe { pref_align_of::() } == 8); assert!(unsafe { pref_align_of::() } == 1); assert!(unsafe { pref_align_of::() } == 4); // Compound types (tuple and array) assert!(unsafe { pref_align_of::<(i32, i32)>() } == 8); assert!(unsafe { pref_align_of::<[i32; 5]>() } == 4); // Custom data types (struct and enum) assert!(unsafe { pref_align_of::() } == 8); assert!(unsafe { pref_align_of::() } == 1); } }