diff --git a/compiler/rustc_resolve/src/imports.rs b/compiler/rustc_resolve/src/imports.rs index 78ad139cff795..4e7622d08462e 100644 --- a/compiler/rustc_resolve/src/imports.rs +++ b/compiler/rustc_resolve/src/imports.rs @@ -406,8 +406,9 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> { } } else if !old_glob_decl.vis().is_at_least(glob_decl.vis(), self.tcx) { // We are glob-importing the same item but with greater visibility. - old_glob_decl.vis.set_unchecked(glob_decl.vis()); - old_glob_decl + // FIXME: Update visibility in place, but without regressions + // (#152004, #151124, #152347). + glob_decl } else if glob_decl.is_ambiguity_recursive() && !old_glob_decl.is_ambiguity_recursive() { // Overwriting a non-ambiguous glob import with an ambiguous glob import. old_glob_decl.ambiguity.set_unchecked(Some(glob_decl)); diff --git a/tests/ui/imports/overwrite-different-vis-2.rs b/tests/ui/imports/overwrite-different-vis-2.rs new file mode 100644 index 0000000000000..50369eafb41c2 --- /dev/null +++ b/tests/ui/imports/overwrite-different-vis-2.rs @@ -0,0 +1,18 @@ +// Regression test for issue #152347. + +//@ check-pass +//@ edition: 2018.. + +use outer::*; // must be before `mod outer` +mod outer { + mod inner { + pub fn f() {} + } + + use inner::*; + pub use inner::*; +} + +fn main() { + f(); +} diff --git a/tests/ui/imports/overwrite-vis-unused.rs b/tests/ui/imports/overwrite-vis-unused.rs new file mode 100644 index 0000000000000..0217fb6250837 --- /dev/null +++ b/tests/ui/imports/overwrite-vis-unused.rs @@ -0,0 +1,12 @@ +// Regression test for issues #152004 and #151124. + +#![deny(unused)] + +mod m { + pub struct S {} +} + +use m::*; //~ ERROR unused import: `m::*` +pub use m::*; + +fn main() {} diff --git a/tests/ui/imports/overwrite-vis-unused.stderr b/tests/ui/imports/overwrite-vis-unused.stderr new file mode 100644 index 0000000000000..a38aa4d5f070a --- /dev/null +++ b/tests/ui/imports/overwrite-vis-unused.stderr @@ -0,0 +1,15 @@ +error: unused import: `m::*` + --> $DIR/overwrite-vis-unused.rs:9:5 + | +LL | use m::*; + | ^^^^ + | +note: the lint level is defined here + --> $DIR/overwrite-vis-unused.rs:3:9 + | +LL | #![deny(unused)] + | ^^^^^^ + = note: `#[deny(unused_imports)]` implied by `#[deny(unused)]` + +error: aborting due to 1 previous error +