Skip to content

Commit

Permalink
Auto merge of #5535 - ebroto:issue_5360, r=phansch
Browse files Browse the repository at this point in the history
used_underscore_binding: do not lint on `await` desugaring

changelog: used_underscore_binding: do not lint on `await` desugaring

Fixes #5360
  • Loading branch information
bors committed Apr 28, 2020
2 parents f2486b3 + fc5fc63 commit 2c4d566
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 8 deletions.
5 changes: 3 additions & 2 deletions clippy_lints/src/misc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ use rustc_hir::{
use rustc_lint::{LateContext, LateLintPass};
use rustc_middle::ty;
use rustc_session::{declare_lint_pass, declare_tool_lint};
use rustc_span::hygiene::DesugaringKind;
use rustc_span::source_map::{ExpnKind, Span};

use crate::consts::{constant, Constant};
Expand Down Expand Up @@ -399,8 +400,8 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for MiscLints {
},
_ => {},
}
if in_attributes_expansion(expr) {
// Don't lint things expanded by #[derive(...)], etc
if in_attributes_expansion(expr) || expr.span.is_desugaring(DesugaringKind::Await) {
// Don't lint things expanded by #[derive(...)], etc or `await` desugaring
return;
}
let binding = match expr.kind {
Expand Down
17 changes: 17 additions & 0 deletions tests/ui/used_underscore_binding.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// edition:2018
// aux-build:proc_macro_derive.rs

#![feature(rustc_private)]
Expand Down Expand Up @@ -87,6 +88,21 @@ fn non_variables() {
f();
}

// Tests that we do not lint if the binding comes from await desugaring,
// but we do lint the awaited expression. See issue 5360.
async fn await_desugaring() {
async fn foo() {}
fn uses_i(_i: i32) {}

foo().await;
({
let _i = 5;
uses_i(_i);
foo()
})
.await
}

fn main() {
let foo = 0u32;
// tests of unused_underscore lint
Expand All @@ -99,4 +115,5 @@ fn main() {
let _ = unused_underscore_complex(foo);
let _ = multiple_underscores(foo);
non_variables();
await_desugaring();
}
18 changes: 12 additions & 6 deletions tests/ui/used_underscore_binding.stderr
Original file line number Diff line number Diff line change
@@ -1,34 +1,40 @@
error: used binding `_foo` which is prefixed with an underscore. A leading underscore signals that a binding will not be used.
--> $DIR/used_underscore_binding.rs:25:5
--> $DIR/used_underscore_binding.rs:26:5
|
LL | _foo + 1
| ^^^^
|
= note: `-D clippy::used-underscore-binding` implied by `-D warnings`

error: used binding `_foo` which is prefixed with an underscore. A leading underscore signals that a binding will not be used.
--> $DIR/used_underscore_binding.rs:30:20
--> $DIR/used_underscore_binding.rs:31:20
|
LL | println!("{}", _foo);
| ^^^^

error: used binding `_foo` which is prefixed with an underscore. A leading underscore signals that a binding will not be used.
--> $DIR/used_underscore_binding.rs:31:16
--> $DIR/used_underscore_binding.rs:32:16
|
LL | assert_eq!(_foo, _foo);
| ^^^^

error: used binding `_foo` which is prefixed with an underscore. A leading underscore signals that a binding will not be used.
--> $DIR/used_underscore_binding.rs:31:22
--> $DIR/used_underscore_binding.rs:32:22
|
LL | assert_eq!(_foo, _foo);
| ^^^^

error: used binding `_underscore_field` which is prefixed with an underscore. A leading underscore signals that a binding will not be used.
--> $DIR/used_underscore_binding.rs:44:5
--> $DIR/used_underscore_binding.rs:45:5
|
LL | s._underscore_field += 1;
| ^^^^^^^^^^^^^^^^^^^

error: aborting due to 5 previous errors
error: used binding `_i` which is prefixed with an underscore. A leading underscore signals that a binding will not be used.
--> $DIR/used_underscore_binding.rs:100:16
|
LL | uses_i(_i);
| ^^

error: aborting due to 6 previous errors

0 comments on commit 2c4d566

Please sign in to comment.