Closed
Description
This code compiles on nightly, but is rejected by stable and beta compilers.
On nightly items defined in a block are visible from all modules defined in this block.
Such "pervasive" visibility is quite unusual and I suspect it was introduced unintentionally.
fn f() {
struct S;
fn g() {
let s = S; // <- beta/stable/nightly - ok
}
mod m {
fn h() {
let s = S; // <- beta/stable - error: unresolved name `S` [E0425], nightly - ok
}
mod n {
fn k() {
let s = S; // <- beta/stable - error: unresolved name `S` [E0425], nightly - ok
}
}
}
}
fn main() {
}
cc @jseyfried
Activity
jseyfried commentedon Feb 24, 2016
This was introduced in #31105 while fixing #23880.
This bug existed earlier (in some sense) but was benign. Before #31105, only type parameters and local variables leaked, but using these "captured" locals and parameters is already a separate error.
Auto merge of #31857 - jseyfried:fix_scoping, r=nikomatsakis
jseyfried commentedon Feb 26, 2016
@petrochenkov this can be closed -- I think bors didn't close it because the magic words were only in the title.