about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2016-02-01 04:52:12 +0000
committerbors <bors@rust-lang.org>2016-02-01 04:52:12 +0000
commit654f68dd50b72d1d812b0760f1b71d7c366f6f55 (patch)
treed07cc489e252e70593b48ff64f511443ec7e8209
parent094c5b0d61a0fb19a1cb94dddd6f59a975089b4b (diff)
parent7a69ee0c4806d30bbda5cc0277f3d0f38c3266c8 (diff)
Auto merge of #30866 - jseyfried:fix_shadowed_use_visibility, r=nrc
This reverts PR #30324, fixing bug #30159 in which a public a glob import makes public any preceding imports that share a name with an item in the module being glob imported from.

For example,
```rust
pub fn f() {}
pub mod foo {
    fn f() {}
}

mod bar {
    use f;
    use f as g;
    pub use foo::*; // This makes the first import public but does not affect the second import.
}
```

This is a [breaking-change].
-rw-r--r--src/librustc_resolve/resolve_imports.rs3
-rw-r--r--src/test/compile-fail/shadowed-use-visibility.rs4
2 files changed, 4 insertions, 3 deletions
diff --git a/src/librustc_resolve/resolve_imports.rs b/src/librustc_resolve/resolve_imports.rs
index 07f6a0f9549..50537a6b936 100644
--- a/src/librustc_resolve/resolve_imports.rs
+++ b/src/librustc_resolve/resolve_imports.rs
@@ -798,9 +798,6 @@ impl<'a, 'b:'a, 'tcx:'b> ImportResolver<'a, 'b, 'tcx> {
                 dest_import_resolution.is_public = is_public;
                 self.add_export(module_, name, &dest_import_resolution);
             }
-        } else {
-            // FIXME #30159: This is required for backwards compatability.
-            dest_import_resolution.is_public |= is_public;
         }
 
         self.check_for_conflicts_between_imports_and_items(module_,
diff --git a/src/test/compile-fail/shadowed-use-visibility.rs b/src/test/compile-fail/shadowed-use-visibility.rs
index bfc6a4ec9b8..1bf7f393384 100644
--- a/src/test/compile-fail/shadowed-use-visibility.rs
+++ b/src/test/compile-fail/shadowed-use-visibility.rs
@@ -17,6 +17,10 @@ mod foo {
 
 mod bar {
     use foo::bar::f as g; //~ ERROR unresolved import
+
+    use foo as f;
+    pub use foo::*;
 }
 
+use bar::f::f; //~ ERROR unresolved import
 fn main() {}