Skip to content

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

Closed
@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

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions