mirror of
https://github.com/rust-lang/rust.git
synced 2026-04-27 18:57:42 +03:00
Rollup merge of #154313 - mu001999-contrib:fix/154295, r=petrochenkov
Init `self_decl` with a correct visibility Fixes rust-lang/rust#154295 r? petrochenkov
This commit is contained in:
@@ -547,6 +547,13 @@ fn name(&self) -> Option<Symbol> {
|
||||
ModuleKind::Def(.., name) => name,
|
||||
}
|
||||
}
|
||||
|
||||
fn opt_def_id(&self) -> Option<DefId> {
|
||||
match self {
|
||||
ModuleKind::Def(_, def_id, _) => Some(*def_id),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Combination of a symbol and its macros 2.0 normalized hygiene context.
|
||||
@@ -784,10 +791,7 @@ fn def_id(self) -> DefId {
|
||||
}
|
||||
|
||||
fn opt_def_id(self) -> Option<DefId> {
|
||||
match self.kind {
|
||||
ModuleKind::Def(_, def_id, _) => Some(def_id),
|
||||
_ => None,
|
||||
}
|
||||
self.kind.opt_def_id()
|
||||
}
|
||||
|
||||
// `self` resolves to the first module ancestor that `is_normal`.
|
||||
@@ -1450,14 +1454,19 @@ fn new_module(
|
||||
&'ra self,
|
||||
parent: Option<Module<'ra>>,
|
||||
kind: ModuleKind,
|
||||
vis: Visibility<DefId>,
|
||||
expn_id: ExpnId,
|
||||
span: Span,
|
||||
no_implicit_prelude: bool,
|
||||
) -> Module<'ra> {
|
||||
let self_decl = match kind {
|
||||
ModuleKind::Def(def_kind, def_id, _) => {
|
||||
Some(self.new_pub_def_decl(Res::Def(def_kind, def_id), span, LocalExpnId::ROOT))
|
||||
}
|
||||
ModuleKind::Def(def_kind, def_id, _) => Some(self.new_def_decl(
|
||||
Res::Def(def_kind, def_id),
|
||||
vis,
|
||||
span,
|
||||
LocalExpnId::ROOT,
|
||||
None,
|
||||
)),
|
||||
ModuleKind::Block => None,
|
||||
};
|
||||
Module(Interned::new_unchecked(self.modules.alloc(ModuleData::new(
|
||||
@@ -1639,6 +1648,7 @@ pub fn new(
|
||||
let graph_root = arenas.new_module(
|
||||
None,
|
||||
ModuleKind::Def(DefKind::Mod, root_def_id, None),
|
||||
Visibility::Public,
|
||||
ExpnId::root(),
|
||||
crate_span,
|
||||
attr::contains_name(attrs, sym::no_implicit_prelude),
|
||||
@@ -1648,6 +1658,7 @@ pub fn new(
|
||||
let empty_module = arenas.new_module(
|
||||
None,
|
||||
ModuleKind::Def(DefKind::Mod, root_def_id, None),
|
||||
Visibility::Public,
|
||||
ExpnId::root(),
|
||||
DUMMY_SP,
|
||||
true,
|
||||
@@ -1749,7 +1760,9 @@ fn new_local_module(
|
||||
span: Span,
|
||||
no_implicit_prelude: bool,
|
||||
) -> Module<'ra> {
|
||||
let module = self.arenas.new_module(parent, kind, expn_id, span, no_implicit_prelude);
|
||||
let vis =
|
||||
kind.opt_def_id().map_or(Visibility::Public, |def_id| self.tcx.visibility(def_id));
|
||||
let module = self.arenas.new_module(parent, kind, vis, expn_id, span, no_implicit_prelude);
|
||||
self.local_modules.push(module);
|
||||
if let Some(def_id) = module.opt_def_id() {
|
||||
self.local_module_map.insert(def_id.expect_local(), module);
|
||||
@@ -1765,7 +1778,9 @@ fn new_extern_module(
|
||||
span: Span,
|
||||
no_implicit_prelude: bool,
|
||||
) -> Module<'ra> {
|
||||
let module = self.arenas.new_module(parent, kind, expn_id, span, no_implicit_prelude);
|
||||
let vis =
|
||||
kind.opt_def_id().map_or(Visibility::Public, |def_id| self.tcx.visibility(def_id));
|
||||
let module = self.arenas.new_module(parent, kind, vis, expn_id, span, no_implicit_prelude);
|
||||
self.extern_module_map.borrow_mut().insert(module.def_id(), module);
|
||||
module
|
||||
}
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
mod foo {
|
||||
pub use self as this;
|
||||
//~^ ERROR `self` is only public within the crate, and cannot be re-exported outside
|
||||
|
||||
pub mod bar {
|
||||
pub use super as parent;
|
||||
//~^ ERROR `super` is only public within the crate, and cannot be re-exported outside
|
||||
pub use self::super as parent2;
|
||||
//~^ ERROR `super` is only public within the crate, and cannot be re-exported outside
|
||||
pub use super::{self as parent3};
|
||||
//~^ ERROR `super` is only public within the crate, and cannot be re-exported outside
|
||||
pub use self::{super as parent4};
|
||||
//~^ ERROR `super` is only public within the crate, and cannot be re-exported outside
|
||||
|
||||
pub use crate as root;
|
||||
pub use crate::{self as root2};
|
||||
pub use super::super as root3;
|
||||
}
|
||||
}
|
||||
|
||||
pub use foo::*;
|
||||
pub use foo::bar::*;
|
||||
|
||||
pub fn main() {}
|
||||
@@ -0,0 +1,43 @@
|
||||
error[E0365]: `self` is only public within the crate, and cannot be re-exported outside
|
||||
--> $DIR/pub-use-self-super-crate.rs:2:13
|
||||
|
|
||||
LL | pub use self as this;
|
||||
| ^^^^^^^^^^^^ re-export of crate public `self`
|
||||
|
|
||||
= note: consider declaring type or module `self` with `pub`
|
||||
|
||||
error[E0365]: `super` is only public within the crate, and cannot be re-exported outside
|
||||
--> $DIR/pub-use-self-super-crate.rs:6:17
|
||||
|
|
||||
LL | pub use super as parent;
|
||||
| ^^^^^^^^^^^^^^^ re-export of crate public `super`
|
||||
|
|
||||
= note: consider declaring type or module `super` with `pub`
|
||||
|
||||
error[E0365]: `super` is only public within the crate, and cannot be re-exported outside
|
||||
--> $DIR/pub-use-self-super-crate.rs:8:17
|
||||
|
|
||||
LL | pub use self::super as parent2;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^ re-export of crate public `super`
|
||||
|
|
||||
= note: consider declaring type or module `super` with `pub`
|
||||
|
||||
error[E0365]: `super` is only public within the crate, and cannot be re-exported outside
|
||||
--> $DIR/pub-use-self-super-crate.rs:10:25
|
||||
|
|
||||
LL | pub use super::{self as parent3};
|
||||
| ^^^^^^^^^^^^^^^ re-export of crate public `super`
|
||||
|
|
||||
= note: consider declaring type or module `super` with `pub`
|
||||
|
||||
error[E0365]: `super` is only public within the crate, and cannot be re-exported outside
|
||||
--> $DIR/pub-use-self-super-crate.rs:12:24
|
||||
|
|
||||
LL | pub use self::{super as parent4};
|
||||
| ^^^^^^^^^^^^^^^^ re-export of crate public `super`
|
||||
|
|
||||
= note: consider declaring type or module `super` with `pub`
|
||||
|
||||
error: aborting due to 5 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0365`.
|
||||
@@ -70,7 +70,7 @@ macro_rules! macro_dollar_crate {
|
||||
|
||||
fn outer() {}
|
||||
|
||||
mod foo {
|
||||
pub mod foo {
|
||||
pub mod bar {
|
||||
pub mod foobar {
|
||||
pub mod qux {
|
||||
|
||||
Reference in New Issue
Block a user