diff options
Diffstat (limited to 'tests/ui/lint/dangling-pointers-from-temporaries/ext.rs')
| -rw-r--r-- | tests/ui/lint/dangling-pointers-from-temporaries/ext.rs | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/tests/ui/lint/dangling-pointers-from-temporaries/ext.rs b/tests/ui/lint/dangling-pointers-from-temporaries/ext.rs new file mode 100644 index 00000000000..a5e84d36090 --- /dev/null +++ b/tests/ui/lint/dangling-pointers-from-temporaries/ext.rs @@ -0,0 +1,32 @@ +#![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 +} |
