Skip to content

Commit

Permalink
Rollup merge of #129270 - compiler-errors:inner-generics-shadowing, r…
Browse files Browse the repository at this point in the history
…=petrochenkov

Don't consider locals to shadow inner items' generics

We don't want to consider the bindings from a `RibKind::Module` itself, because for an inner item that module will contain the local bindings from the function body or wherever else the inner item is being defined.

Fixes #129265

r? petrochenkov
  • Loading branch information
matthiaskrgr authored Aug 20, 2024
2 parents 2e58d62 + 78d0e08 commit d502b1c
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 3 deletions.
6 changes: 3 additions & 3 deletions compiler/rustc_resolve/src/late.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2677,14 +2677,14 @@ impl<'a: 'ast, 'b, 'ast, 'tcx> LateResolutionVisitor<'a, 'b, 'ast, 'tcx> {
// We also can't shadow bindings from associated parent items.
for ns in [ValueNS, TypeNS] {
for parent_rib in self.ribs[ns].iter().rev() {
seen_bindings
.extend(parent_rib.bindings.keys().map(|ident| (*ident, ident.span)));

// Break at mod level, to account for nested items which are
// allowed to shadow generic param names.
if matches!(parent_rib.kind, RibKind::Module(..)) {
break;
}

seen_bindings
.extend(parent_rib.bindings.keys().map(|ident| (*ident, ident.span)));
}
}

Expand Down
8 changes: 8 additions & 0 deletions tests/ui/resolve/local-shadows-inner-generic.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
//@ check-pass

#![allow(non_camel_case_types)]

pub fn main() {
let a = 1;
struct Foo<a> { field: a, };
}

0 comments on commit d502b1c

Please sign in to comment.