diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2022-02-25 20:12:48 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-02-25 20:12:48 +0100 |
| commit | 070d7c2a429fa3c53dad116cabfdf5928a5caa70 (patch) | |
| tree | 94c12cf1e7220df9c5ac3366fefb9c453cbbb89f | |
| parent | ed202b820831c15cea388d67985feae3784bac13 (diff) | |
| parent | bbe3447313b52db1c0162061a77948e4da275809 (diff) | |
| download | rust-070d7c2a429fa3c53dad116cabfdf5928a5caa70.tar.gz rust-070d7c2a429fa3c53dad116cabfdf5928a5caa70.zip | |
Rollup merge of #94353 - flip1995:fix_debug_assert_unused, r=Dylan-DPC
Fix debug_assert in unused lint pass
This fixes a debug assertion in the unused lint pass. As a side effect, this also improves the span generated for tuples in the `unused_must_use` lint.
found in #94329
A reproducer for this would be
```rust
fn main() { (1, (3,)); }
```
Not sure, if I should add a regression test for a `debug_assert`.
| -rw-r--r-- | compiler/rustc_lint/src/unused.rs | 12 | ||||
| -rw-r--r-- | src/test/ui/lint/unused/must_use-array.stderr | 2 | ||||
| -rw-r--r-- | src/test/ui/lint/unused/must_use-trait.stderr | 4 | ||||
| -rw-r--r-- | src/test/ui/lint/unused/must_use-tuple.stderr | 6 |
4 files changed, 12 insertions, 12 deletions
diff --git a/compiler/rustc_lint/src/unused.rs b/compiler/rustc_lint/src/unused.rs index b71ffa43d85..16d222f68a3 100644 --- a/compiler/rustc_lint/src/unused.rs +++ b/compiler/rustc_lint/src/unused.rs @@ -240,17 +240,17 @@ impl<'tcx> LateLintPass<'tcx> for UnusedResults { } ty::Tuple(ref tys) => { let mut has_emitted = false; - let spans = if let hir::ExprKind::Tup(comps) = &expr.kind { + let comps = if let hir::ExprKind::Tup(comps) = expr.kind { debug_assert_eq!(comps.len(), tys.len()); - comps.iter().map(|e| e.span).collect() + comps } else { - vec![] + &[] }; for (i, ty) in tys.iter().enumerate() { let descr_post = &format!(" in tuple element {}", i); - let span = *spans.get(i).unwrap_or(&span); - if check_must_use_ty(cx, ty, expr, span, descr_pre, descr_post, plural_len) - { + let e = comps.get(i).unwrap_or(expr); + let span = e.span; + if check_must_use_ty(cx, ty, e, span, descr_pre, descr_post, plural_len) { has_emitted = true; } } diff --git a/src/test/ui/lint/unused/must_use-array.stderr b/src/test/ui/lint/unused/must_use-array.stderr index c42223b5198..45a5317fccc 100644 --- a/src/test/ui/lint/unused/must_use-array.stderr +++ b/src/test/ui/lint/unused/must_use-array.stderr @@ -32,7 +32,7 @@ error: unused array of boxed `T` trait objects in tuple element 1 that must be u --> $DIR/must_use-array.rs:43:5 | LL | impl_array(); - | ^^^^^^^^^^^^^ + | ^^^^^^^^^^^^ error: unused array of arrays of arrays of `S` that must be used --> $DIR/must_use-array.rs:45:5 diff --git a/src/test/ui/lint/unused/must_use-trait.stderr b/src/test/ui/lint/unused/must_use-trait.stderr index 11555d80825..a42eb884178 100644 --- a/src/test/ui/lint/unused/must_use-trait.stderr +++ b/src/test/ui/lint/unused/must_use-trait.stderr @@ -26,13 +26,13 @@ error: unused boxed `Critical` trait object in tuple element 1 that must be used --> $DIR/must_use-trait.rs:37:5 | LL | get_critical_tuple(); - | ^^^^^^^^^^^^^^^^^^^^^ + | ^^^^^^^^^^^^^^^^^^^^ error: unused implementer of `Critical` in tuple element 2 that must be used --> $DIR/must_use-trait.rs:37:5 | LL | get_critical_tuple(); - | ^^^^^^^^^^^^^^^^^^^^^ + | ^^^^^^^^^^^^^^^^^^^^ error: aborting due to 5 previous errors diff --git a/src/test/ui/lint/unused/must_use-tuple.stderr b/src/test/ui/lint/unused/must_use-tuple.stderr index 0532d89e039..e5709a5f0af 100644 --- a/src/test/ui/lint/unused/must_use-tuple.stderr +++ b/src/test/ui/lint/unused/must_use-tuple.stderr @@ -31,15 +31,15 @@ error: unused `Result` in tuple element 0 that must be used --> $DIR/must_use-tuple.rs:14:5 | LL | foo(); - | ^^^^^^ + | ^^^^^ | = note: this `Result` may be an `Err` variant, which should be handled error: unused `Result` in tuple element 0 that must be used - --> $DIR/must_use-tuple.rs:16:6 + --> $DIR/must_use-tuple.rs:16:7 | LL | ((Err::<(), ()>(()), ()), ()); - | ^^^^^^^^^^^^^^^^^^^^^^^ + | ^^^^^^^^^^^^^^^^^ | = note: this `Result` may be an `Err` variant, which should be handled |
