rust/tests/ui/lint/dangling-pointers-from-temp.../ext.rs

33 lines
655 B
Rust

#![deny(dangling_pointers_from_temporaries)]
use std::fmt::Debug;
trait Ext1 {
fn dbg(self) -> Self
where
Self: Sized + Debug,
{
dbg!(&self);
self
}
}
impl<T> Ext1 for *const T {}
trait Ext2 {
fn foo(self);
}
impl Ext2 for *const u32 {
fn foo(self) {
dbg!(unsafe { self.read() });
}
}
fn main() {
let _ptr1 = Vec::<u32>::new().as_ptr().dbg();
//~^ ERROR a dangling pointer will be produced because the temporary `Vec<u32>` will be dropped
let _ptr2 = vec![0].as_ptr().foo();
//~^ ERROR a dangling pointer will be produced because the temporary `Vec<u32>` will be dropped
}