use crate::{
PlaceTy, OpTy, ImmTy, Immediate, Scalar, ScalarMaybeUndef, Tag,
- OperatorEvalContextExt, MiriMemoryKind,
+ OperatorEvalContextExt
};
impl<'a, 'mir, 'tcx> EvalContextExt<'a, 'mir, 'tcx> for crate::MiriEvalContext<'a, 'mir, 'tcx> {}
)?;
}
- "type_name" => {
- let ty = substs.type_at(0);
- let ty_name = ty.to_string();
- let ptr = this.memory_mut().allocate_static_bytes(ty_name.as_bytes(), MiriMemoryKind::Static.into());
- let value = Immediate::new_slice(Scalar::Ptr(ptr), ty_name.len() as u64, this);
- this.write_immediate(value, dest)?;
- }
-
"unchecked_div" => {
let l = this.read_immediate(args[0])?;
let r = this.read_immediate(args[1])?;
+#![feature(core_intrinsics)]
+
+use std::intrinsics::type_name;
use std::mem::{size_of, size_of_val};
fn main() {
assert_eq!(size_of_val(&[] as &[i32]), 0);
assert_eq!(size_of_val(&[1, 2, 3] as &[i32]), 12);
assert_eq!(size_of_val("foobar"), 6);
+
+ assert_eq!(unsafe { type_name::<Option<i32>>() }, "core::option::Option<i32>");
}