//@revisions: stack tree //@[tree]compile-flags: -Zmiri-tree-borrows #![feature(unsized_fn_params)] #![feature(custom_mir, core_intrinsics)] fn unsized_params() { pub fn f0(_f: dyn FnOnce()) {} pub fn f1(_s: str) {} pub fn f2(_x: i32, _y: [i32]) {} pub fn f3(_p: dyn Send) {} let c: Box = Box::new(|| {}); f0(*c); let foo = "foo".to_string().into_boxed_str(); f1(*foo); let sl: Box<[i32]> = [0, 1, 2].to_vec().into_boxed_slice(); f2(5, *sl); let p: Box = Box::new((1, 2)); f3(*p); } fn unsized_field_projection() { use std::intrinsics::mir::*; pub struct S(T); #[custom_mir(dialect = "runtime", phase = "optimized")] fn f(x: S<[u8]>) { mir! { { let idx = 0; // Project to an unsized field of an unsized local. x.0[idx] = 0; let _val = x.0[idx]; Return() } } } let x: Box> = Box::new(S([0])); f(*x); } fn main() { unsized_params(); unsized_field_projection(); }