add test for pinned must_use pointers

This commit is contained in:
Max Niederman 2023-11-18 21:01:02 -08:00
parent 173b950311
commit c5ed7b0ead
No known key found for this signature in database
GPG Key ID: C2EB24390E0AC0FF
2 changed files with 65 additions and 0 deletions

View File

@ -0,0 +1,45 @@
#![deny(unused_must_use)]
use std::{ops::Deref, pin::Pin};
#[must_use]
struct MustUse;
#[must_use]
struct MustUsePtr<'a, T>(&'a T);
impl<'a, T> Deref for MustUsePtr<'a, T> {
type Target = T;
fn deref(&self) -> &Self::Target {
self.0
}
}
fn pin_ref() -> Pin<&'static ()> {
Pin::new(&())
}
fn pin_ref_mut() -> Pin<&'static mut ()> {
Pin::new(unimplemented!())
}
fn pin_must_use_ptr() -> Pin<MustUsePtr<'static, ()>> {
Pin::new(MustUsePtr(&()))
}
fn pin_box() -> Pin<Box<()>> {
Box::pin(())
}
fn pin_box_must_use() -> Pin<Box<MustUse>> {
Box::pin(MustUse)
}
fn main() {
pin_ref();
pin_ref_mut();
pin_must_use_ptr(); //~ ERROR unused pinned `MustUsePtr` that must be used
pin_box();
pin_box_must_use(); //~ ERROR unused pinned boxed `MustUse` that must be used
}

View File

@ -0,0 +1,20 @@
error: unused pinned `MustUsePtr` that must be used
--> $DIR/must_use-pin.rs:42:5
|
LL | pin_must_use_ptr();
| ^^^^^^^^^^^^^^^^^^
|
note: the lint level is defined here
--> $DIR/must_use-pin.rs:1:9
|
LL | #![deny(unused_must_use)]
| ^^^^^^^^^^^^^^^
error: unused pinned boxed `MustUse` that must be used
--> $DIR/must_use-pin.rs:44:5
|
LL | pin_box_must_use();
| ^^^^^^^^^^^^^^^^^^
error: aborting due to 2 previous errors