You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Order of glob imports affects whether an ambiguity is reported #98467
mod a {pubfnfoo(){}}mod b {pubfnfoo(){}}mod f {pubuse a::*;pubuse b::*;}mod g {pubuse a::*;pubuse f::*;}fnmain(){
g::foo();}
If you reorder the glob imports in g, it does not compile (playground):
error[E0659]: `foo` is ambiguous
--> src/main.rs:20:8
|
20 | g::foo();
| ^^^ ambiguous name
|
= note: ambiguous because of multiple glob imports of a name in the same module
note: `foo` could refer to the function imported here
--> src/main.rs:10:13
|
10 | pub use a::*;
| ^^^^
= help: consider adding an explicit import of `foo` to disambiguate
note: `foo` could also refer to the function imported here
--> src/main.rs:11:13
|
11 | pub use b::*;
| ^^^^
= help: consider adding an explicit import of `foo` to disambiguate
Both versions failed to compile prior to 1.32.0.
I found this while looking at #97584/#47525, which looks very related, but regressed earlier (1.15) - I have a WIP fix for that issue, but it fails on the linked UI test because it makes this error again. I'm mostly opening this to double-check that this change wasn't deliberate (since the change to the UI test's output was blessed).
I initially thought that perhaps the unambiguous import of a::foo via the glob pub use a::*; in g is supposed to "win" against the glob import of the ambiguous f::foo, but then I don't see why this should be order dependent.
I see on zulip there was some confusion surrounding the edition:
The 2018+ edition version of this code:
mod a {pubfnfoo(){}}mod b {pubfnfoo(){}}mod f {pubusecrate::a::*;pubusecrate::b::*;}mod g {pubusecrate::a::*;pubusecrate::f::*;}fnmain(){
g::foo();}
still behaves the same way as the 2015 code, in that it compiles, but shouldn't (IMO), and is still dependent on the order of the uses in g in whether it errors or not.
Activity
SNCPlay42 commentedon Jun 24, 2022
I initially thought that perhaps the unambiguous import of
a::foovia the globpub use a::*;ingis supposed to "win" against the glob import of the ambiguousf::foo, but then I don't see why this should be order dependent.apiraino commentedon Jun 27, 2022
WG-prioritization assigning priority (Zulip discussion).
@rustbot label -I-prioritize +P-medium
SNCPlay42 commentedon Jun 27, 2022
I see on zulip there was some confusion surrounding the edition:
The 2018+ edition version of this code:
still behaves the same way as the 2015 code, in that it compiles, but shouldn't (IMO), and is still dependent on the order of the uses in
gin whether it errors or not.bvanjoi commentedon Jul 2, 2023
related: #113242
related: #113099