Skip to content

Order of glob imports affects whether an ambiguity is reported #98467

Closed
@SNCPlay42

Description

@SNCPlay42

The following code (2015 edition, a subset of /src/test/ui/imports/duplicate.rs, playground) compiles:

mod a {
    pub fn foo() {}
}

mod b {
    pub fn foo() {}
}

mod f {
    pub use a::*;
    pub use b::*;
}

mod g {
    pub use a::*;
    pub use f::*;
}

fn main() {
    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).

@rustbot label C-bug T-compiler A-resolve regression-from-stable-to-stable

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-resolveArea: Name/path resolution done by `rustc_resolve` specificallyC-bugCategory: This is a bug.P-mediumMedium priorityT-compilerRelevant to the compiler team, which will review and decide on the PR/issue.regression-from-stable-to-stablePerformance or correctness regression from one stable version to another.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions