rust/src/test/ui/unused/unused-closure.rs
Tomasz Miąsko 821d50aa0c Make closures and generators a must use types
Warn about unused expressions with closure or generator type. This follows
existing precedence of must use annotations present on `FnOnce`, `FnMut`, `Fn`
traits, which already indirectly apply to closures in some cases, e.g.,:

```rust
fn f() -> impl FnOnce() {
    || {}
}

fn main() {
    // an existing warning: unused implementer of `std::ops::FnOnce` that must be used:
    f();

    // a new warning: unused closure that must be used:
    || {};
}
```
2020-07-28 00:00:00 +00:00

41 lines
1002 B
Rust

// Test that closures and generators are "must use" types.
// edition:2018
#![feature(async_closure)]
#![feature(const_in_array_repeat_expressions)]
#![feature(generators)]
#![deny(unused_must_use)]
fn unused() {
|| { //~ ERROR unused closure that must be used
println!("Hello!");
};
async {}; //~ ERROR unused implementer of `std::future::Future` that must be used
|| async {}; //~ ERROR unused closure that must be used
async || {}; //~ ERROR unused closure that must be used
[Box::new([|| {}; 10]); 1]; //~ ERROR unused array of boxed arrays of closures that must be used
[|| { //~ ERROR unused array of generators that must be used
yield 42u32;
}; 42];
vec![|| "a"].pop().unwrap(); //~ ERROR unused closure that must be used
let b = false;
|| true; //~ ERROR unused closure that must be used
println!("{}", b);
}
fn ignored() {
let _ = || {};
let _ = || yield 42;
}
fn main() {
unused();
ignored();
}