]> git.lizzy.rs Git - rust.git/blob - src/tools/miri/tests/pass/intrinsics.rs
Auto merge of #104915 - weihanglo:update-cargo, r=ehuss
[rust.git] / src / tools / miri / tests / pass / intrinsics.rs
1 //@compile-flags: -Zmiri-permissive-provenance
2 #![feature(core_intrinsics, layout_for_ptr)]
3 //! Tests for various intrinsics that do not fit anywhere else.
4
5 use std::intrinsics;
6 use std::mem::{size_of, size_of_val, size_of_val_raw};
7
8 struct Bomb;
9
10 impl Drop for Bomb {
11     fn drop(&mut self) {
12         eprintln!("BOOM!");
13     }
14 }
15
16 fn main() {
17     assert_eq!(size_of::<Option<i32>>(), 8);
18     assert_eq!(size_of_val(&()), 0);
19     assert_eq!(size_of_val(&42), 4);
20     assert_eq!(size_of_val(&[] as &[i32]), 0);
21     assert_eq!(size_of_val(&[1, 2, 3] as &[i32]), 12);
22     assert_eq!(size_of_val("foobar"), 6);
23
24     unsafe {
25         assert_eq!(size_of_val_raw(&[1] as &[i32] as *const [i32]), 4);
26     }
27     unsafe {
28         assert_eq!(size_of_val_raw(0x100 as *const i32), 4);
29     }
30
31     assert_eq!(intrinsics::type_name::<Option<i32>>(), "core::option::Option<i32>");
32
33     assert_eq!(intrinsics::likely(false), false);
34     assert_eq!(intrinsics::unlikely(true), true);
35
36     intrinsics::forget(Bomb);
37
38     let _v = intrinsics::discriminant_value(&Some(()));
39     let _v = intrinsics::discriminant_value(&0);
40     let _v = intrinsics::discriminant_value(&true);
41     let _v = intrinsics::discriminant_value(&vec![1, 2, 3]);
42 }