Skip to content

unresolved import using separate files, but not mod statements #26873

@durka

Description

@durka

This code compiles:

//! lib.rs

mod A {
    pub mod B {
        use super::*;

        pub struct S;
    }

    pub mod C {
        use super::*;
        use super::B::S;

        pub struct T;
    }

    pub use self::C::T;
}

use A::*;
$ rustc --crate-type lib lib.rs -Awarnings
$

However, splitting the code into files causes compilation to fail:

//! lib.rs

mod A;

use A::*;
//! A/mod.rs

pub mod B;
pub mod C;

pub use self::C::T;
//! A/B.rs

use super::*;
pub struct S;
//! A/C.rs

use super::*;

use super::B::S;

pub struct T { i: i32 }
$ rustc --crate-type lib lib.rs -Awarnings
lib.rs:3:5: 3:10 error: unresolved import
lib.rs:3 use A::*;
             ^~~~~
A/mod.rs:4:9: 4:26 error: unresolved import
A/mod.rs:4 pub use self::C::T;
                   ^~~~~~~~~~~~~~~~~
A/C.rs:1:5: 1:14 error: unresolved import
A/C.rs:1 use super::*;
             ^~~~~~~~~
A/B.rs:1:5: 1:14 error: unresolved import
A/B.rs:1 use super::*;
             ^~~~~~~~~
error: aborting due to 4 previous errors
$

I am not sure whether use C::T or use self::C::T is correct; regardless, replacing the latter with the former in A/mod.rs produces a similar error:

$ rustc --crate-type lib lib.rs -Awarnings
A/mod.rs:4:9: 4:10 error: unresolved import `C::T`. Maybe a missing `extern crate C`?
A/mod.rs:4 pub use C::T;
                   ^
error: aborting due to previous error
$

Metadata

Metadata

Assignees

No one assigned

    Labels

    E-needs-testCall for participation: An issue has been fixed and does not reproduce, but no test has been added.

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions