Detect shadowing in pattern field

This commit is contained in:
Samuel Tardieu 2024-12-08 22:33:39 +01:00
parent c4aeb32f1d
commit f51f72b400
3 changed files with 22 additions and 2 deletions

View file

@ -263,7 +263,7 @@ fn is_self_shadow(cx: &LateContext<'_>, pat: &Pat<'_>, mut expr: &Expr<'_>, hir_
fn find_init<'tcx>(cx: &LateContext<'tcx>, hir_id: HirId) -> Option<(&'tcx Expr<'tcx>, Option<HirId>)> {
for (hir_id, node) in cx.tcx.hir().parent_iter(hir_id) {
let init = match node {
Node::Arm(_) | Node::Pat(_) | Node::Param(_) => continue,
Node::Arm(_) | Node::Pat(_) | Node::PatField(_) | Node::Param(_) => continue,
Node::Expr(expr) => match expr.kind {
ExprKind::Match(e, _, _) | ExprKind::Let(&LetExpr { init: e, .. }) => Some((e, None)),
// If we're a closure argument, then a parent call is also an associated item.

View file

@ -133,4 +133,12 @@ fn shadow_closure() {
.collect();
}
struct Issue13795 {
value: i32,
}
fn issue13795(value: Issue13795) {
let Issue13795 { value, .. } = value;
}
fn main() {}

View file

@ -304,5 +304,17 @@ note: previous binding is here
LL | .map(|i| i.map(|i| i - 10))
| ^
error: aborting due to 25 previous errors
error: `value` is shadowed by itself in `value`
--> tests/ui/shadow.rs:141:22
|
LL | let Issue13795 { value, .. } = value;
| ^^^^^
|
note: previous binding is here
--> tests/ui/shadow.rs:140:15
|
LL | fn issue13795(value: Issue13795) {
| ^^^^^
error: aborting due to 26 previous errors