Skip to content

Commit

Permalink
Enforce must_use on associated types and RPITITs
Browse files Browse the repository at this point in the history
  • Loading branch information
compiler-errors committed Nov 30, 2023
1 parent c9c760f commit d1009a4
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 1 deletion.
2 changes: 1 addition & 1 deletion compiler/rustc_lint/src/unused.rs
Original file line number Diff line number Diff line change
Expand Up @@ -291,7 +291,7 @@ impl<'tcx> LateLintPass<'tcx> for UnusedResults {
.map(|inner| MustUsePath::Pinned(Box::new(inner)))
}
ty::Adt(def, _) => is_def_must_use(cx, def.did(), span),
ty::Alias(ty::Opaque, ty::AliasTy { def_id: def, .. }) => {
ty::Alias(ty::Opaque | ty::Projection, ty::AliasTy { def_id: def, .. }) => {
elaborate(
cx.tcx,
cx.tcx.explicit_item_bounds(def).instantiate_identity_iter_copied(),
Expand Down
15 changes: 15 additions & 0 deletions tests/ui/lint/unused/assoc-types.assoc_ty.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
error: unused implementer of `Future` that must be used
--> $DIR/assoc-types.rs:19:5
|
LL | T::foo();
| ^^^^^^^^
|
= note: futures do nothing unless you `.await` or poll them
note: the lint level is defined here
--> $DIR/assoc-types.rs:4:9
|
LL | #![deny(unused_must_use)]
| ^^^^^^^^^^^^^^^

error: aborting due to 1 previous error

15 changes: 15 additions & 0 deletions tests/ui/lint/unused/assoc-types.rpitit.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
error: unused implementer of `Future` that must be used
--> $DIR/assoc-types.rs:19:5
|
LL | T::foo();
| ^^^^^^^^
|
= note: futures do nothing unless you `.await` or poll them
note: the lint level is defined here
--> $DIR/assoc-types.rs:4:9
|
LL | #![deny(unused_must_use)]
| ^^^^^^^^^^^^^^^

error: aborting due to 1 previous error

23 changes: 23 additions & 0 deletions tests/ui/lint/unused/assoc-types.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
// edition: 2021
// revisions: rpitit assoc_ty

#![deny(unused_must_use)]

use std::future::Future;

pub trait Tr {
type Fut: Future<Output = ()>;

#[cfg(rpitit)]
fn foo() -> impl Future<Output = ()>;

#[cfg(assoc_ty)]
fn foo() -> Self::Fut;
}

pub async fn bar<T: Tr>() {
T::foo();
//~^ ERROR unused implementer of `Future` that must be used
}

fn main() {}

0 comments on commit d1009a4

Please sign in to comment.