Skip to content

Commit 1dc1124

Browse files
committed
resolve: Fix some asserts in import validation
1 parent 910ec6d commit 1dc1124

File tree

4 files changed

+71
-2
lines changed

4 files changed

+71
-2
lines changed

src/librustc_resolve/resolve_imports.rs

+4-2
Original file line numberDiff line numberDiff line change
@@ -842,12 +842,14 @@ impl<'a, 'b:'a, 'c: 'b> ImportResolver<'a, 'b, 'c> {
842842
module
843843
}
844844
PathResult::Failed(span, msg, false) => {
845-
assert!(directive.imported_module.get().is_none());
845+
assert!(!self.ambiguity_errors.is_empty() ||
846+
directive.imported_module.get().is_none());
846847
resolve_error(self, span, ResolutionError::FailedToResolve(&msg));
847848
return None;
848849
}
849850
PathResult::Failed(span, msg, true) => {
850-
assert!(directive.imported_module.get().is_none());
851+
assert!(!self.ambiguity_errors.is_empty() ||
852+
directive.imported_module.get().is_none());
851853
return if let Some((suggested_path, note)) = self.make_path_suggestion(
852854
span, directive.module_path.clone(), &directive.parent_scope
853855
) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
pub mod last_segment {
2+
pub mod issue_56125 {}
3+
}
4+
5+
pub mod non_last_segment {
6+
pub mod non_last_segment {
7+
pub mod issue_56125 {}
8+
}
9+
}

src/test/ui/imports/issue-56125.rs

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
// edition:2018
2+
// compile-flags:--extern issue_56125
3+
// aux-build:issue-56125.rs
4+
5+
use issue_56125::last_segment::*;
6+
//~^ ERROR `issue_56125` is ambiguous
7+
//~| ERROR unresolved import `issue_56125::last_segment`
8+
use issue_56125::non_last_segment::non_last_segment::*;
9+
//~^ ERROR `issue_56125` is ambiguous
10+
//~| ERROR failed to resolve: could not find `non_last_segment` in `issue_56125`
11+
12+
fn main() {}
+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
error[E0433]: failed to resolve: could not find `non_last_segment` in `issue_56125`
2+
--> $DIR/issue-56125.rs:8:18
3+
|
4+
LL | use issue_56125::non_last_segment::non_last_segment::*;
5+
| ^^^^^^^^^^^^^^^^ could not find `non_last_segment` in `issue_56125`
6+
7+
error[E0432]: unresolved import `issue_56125::last_segment`
8+
--> $DIR/issue-56125.rs:5:18
9+
|
10+
LL | use issue_56125::last_segment::*;
11+
| ^^^^^^^^^^^^ could not find `last_segment` in `issue_56125`
12+
13+
error[E0659]: `issue_56125` is ambiguous (name vs any other name during import resolution)
14+
--> $DIR/issue-56125.rs:5:5
15+
|
16+
LL | use issue_56125::last_segment::*;
17+
| ^^^^^^^^^^^ ambiguous name
18+
|
19+
= note: `issue_56125` could refer to an extern crate passed with `--extern`
20+
= help: use `::issue_56125` to refer to this extern crate unambiguously
21+
note: `issue_56125` could also refer to the module imported here
22+
--> $DIR/issue-56125.rs:5:5
23+
|
24+
LL | use issue_56125::last_segment::*;
25+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
26+
= help: use `self::issue_56125` to refer to this module unambiguously
27+
28+
error[E0659]: `issue_56125` is ambiguous (name vs any other name during import resolution)
29+
--> $DIR/issue-56125.rs:8:5
30+
|
31+
LL | use issue_56125::non_last_segment::non_last_segment::*;
32+
| ^^^^^^^^^^^ ambiguous name
33+
|
34+
= note: `issue_56125` could refer to an extern crate passed with `--extern`
35+
= help: use `::issue_56125` to refer to this extern crate unambiguously
36+
note: `issue_56125` could also refer to the module imported here
37+
--> $DIR/issue-56125.rs:5:5
38+
|
39+
LL | use issue_56125::last_segment::*;
40+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
41+
= help: use `self::issue_56125` to refer to this module unambiguously
42+
43+
error: aborting due to 4 previous errors
44+
45+
Some errors occurred: E0432, E0433, E0659.
46+
For more information about an error, try `rustc --explain E0432`.

0 commit comments

Comments
 (0)