If it is not a bug and it is intended, I don’t like it very much 
I think that the following is a simple example that shows the problem:
mod parent {
mod private {
pub fn test() -> Test {
Test
}
#[derive(Debug)]
pub struct Test;
}
pub use self::private::test;
}
use parent::test;
fn main() {
println!("{:?}", test());
// The following does not compile
// println!("{:?}", parent::private::Test);
}
Should this situation be posted in the internal forum?
EDIT: posted on the internals forum