mirror of https://github.com/rust-lang/rust.git
33 lines
655 B
Rust
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
|
|
}
|