blob: 7305cabfa8c1632f6f0ba475006b368ceb3cea28 [file] [edit]
//@ revisions: next old
//@[next] compile-flags: -Znext-solver
//@ ignore-compare-mode-next-solver (explicit revisions)
#![feature(try_as_dyn)]
use std::any::{Any, try_as_dyn};
type Payload = Box<i32>;
fn main() {
let storage: Box<Payload> = Box::new(Box::new(1i32));
let wrong: &'static Payload = extend(&*storage);
drop(storage);
println!("{wrong}");
}
fn extend(a: &Payload) -> &'static Payload {
let b: &(dyn Any + 'static) = try_as_dyn::<&Payload, dyn Any + 'static>(&a).unwrap();
//~^ ERROR: borrowed data escapes outside of function
let c: &&'static Payload = b.downcast_ref::<&'static Payload>().unwrap();
*c
}