I'm seeing a strange issue where a type is not being exported from a module if that module imports a type with the same name. Here is an example that demonstrates this issue:
mod abc {
pub struct Beeblebrox;
pub struct Zaphod;
}
mod foo {
pub mod bar {
use crate::abc::*;
#[derive(Debug)]
pub enum Zaphod {
Whale,
President,
}
}
pub use bar::*;
}
mod baz {
pub fn do_something() {
println!("{:?}", crate::foo::Zaphod::Whale);
}
}
fn main() {
baz::do_something();
}
In module bar, we're importing abc::Zaphod, and then defining a type of the same name. When exporting everything from bar via pub use bar::*, the Zaphod type is not exported. Is this expected behavior? It seems wrong to me.
I would have expected the type that's actually declared in bar to take precedence and be exported. Either that, or the compiler should emit a useful error describing the collision. At present, the type is silently omitted.
Meta
rustc 1.67.0-nightly (215e3cd21 2022-11-03)
binary: rustc
commit-hash: 215e3cd218b83b8a3152d84d92f17109253c25e1
commit-date: 2022-11-03
host: x86_64-unknown-linux-gnu
release: 1.67.0-nightly
LLVM version: 15.0.4
Backtrace
Compiling playground v0.0.1 (/playground)
error[[E0433]](https://doc.rust-lang.org/nightly/error-index.html#E0433): failed to resolve: could not find `Zaphod` in `foo`
--> src/main.rs:20:38
|
20 | println!("{:?}", crate::foo::Zaphod::Whale);
| ^^^^^^ could not find `Zaphod` in `foo`
warning: unused import: `crate::abc::*`
--> src/main.rs:8:13
|
8 | [use crate::abc::*;](https://play.rust-lang.org/?version=nightly&mode=debug&edition=2021&gist=1980019cec4c271a2bfddb14e2f016f0#)
| ^^^^^^^^^^^^^
|
= note: `#[warn(unused_imports)]` on by default
For more information about this error, try `rustc --explain E0433`.
warning: `playground` (bin "playground") generated 1 warning
error: could not compile `playground` due to previous error; 1 warning emitted
I'm seeing a strange issue where a type is not being exported from a module if that module imports a type with the same name. Here is an example that demonstrates this issue:
In module
bar, we're importingabc::Zaphod, and then defining a type of the same name. When exporting everything frombarviapub use bar::*, theZaphodtype is not exported. Is this expected behavior? It seems wrong to me.I would have expected the type that's actually declared in
barto take precedence and be exported. Either that, or the compiler should emit a useful error describing the collision. At present, the type is silently omitted.Meta
Backtrace