about summary refs log tree commit diff
path: root/src/libsyntax
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2016-04-12 22:21:23 -0700
committerbors <bors@rust-lang.org>2016-04-12 22:21:23 -0700
commit4b71f8d1417423d933dfd4f74d5d4d167b85f77e (patch)
tree0dbbc205324310a16be1d2e283f6e08146ea0651 /src/libsyntax
parent7c27cce9e59bbbc1e556de257de85122dad88dcd (diff)
parentbc6daea2db6d5b5686e857b93c1f71a94268dddb (diff)
downloadrust-4b71f8d1417423d933dfd4f74d5d4d167b85f77e.tar.gz
rust-4b71f8d1417423d933dfd4f74d5d4d167b85f77e.zip
Auto merge of #32814 - jseyfried:improve_duplicate_glob_detection, r=nikomatsakis
resolve: Improve duplicate glob detection

This fixes a bug introduced in #31726 in which we erroneously allow multiple imports of the same item under some circumstances.

More specifically, we erroneously allow a module that is in a cycle of glob re-exports to have other re-exports (besides the glob from the cycle).
For example,
```rust
pub fn f() {}
mod foo {
    pub use f; // (1) This defines `foo::f`.
    pub use bar::*; // (3) This also defines `foo::f`, which should be a duplicate error but is currently allowed.
}
mod bar {
    pub use foo::*; // (2) This defines `bar::f`.
}
```

A module in a glob re-export cycle can still have `pub` items after this PR. For example,
```rust
mod foo {
    pub fn f() {}; // (1) This defines `foo::f`.
    pub use bar::*; // (3) This is not a duplicate error since items shadow glob-imported re-exports (cf #31337).
}
mod bar {
    pub use foo::*; // (2) This defines `bar::f`.
}
```
r? @nikomatsakis
Diffstat (limited to 'src/libsyntax')
0 files changed, 0 insertions, 0 deletions