about summary refs log tree commit diff
diff options
context:
space:
mode:
authorVadim Petrochenkov <vadim.petrochenkov@gmail.com>2018-11-25 05:45:43 +0300
committerVadim Petrochenkov <vadim.petrochenkov@gmail.com>2018-11-25 16:41:29 +0300
commitfe548e311a8f3a2e193989dc959841874738423f (patch)
tree386d043020c28d20d3264065687a78182a1b2be7
parente593431bc7f3ad89aea8e792384d6719bf60f3f3 (diff)
downloadrust-fe548e311a8f3a2e193989dc959841874738423f.tar.gz
rust-fe548e311a8f3a2e193989dc959841874738423f.zip
resolve: Fix some more asserts in import validation
-rw-r--r--src/librustc_resolve/resolve_imports.rs3
-rw-r--r--src/test/ui/imports/auxiliary/issue-56125.rs2
-rw-r--r--src/test/ui/imports/issue-56125.rs25
-rw-r--r--src/test/ui/imports/issue-56125.stderr59
4 files changed, 63 insertions, 26 deletions
diff --git a/src/librustc_resolve/resolve_imports.rs b/src/librustc_resolve/resolve_imports.rs
index 616cc9d2fc5..52e3e54b9f9 100644
--- a/src/librustc_resolve/resolve_imports.rs
+++ b/src/librustc_resolve/resolve_imports.rs
@@ -864,7 +864,8 @@ impl<'a, 'b:'a, 'c: 'b> ImportResolver<'a, 'b, 'c> {
             }
             PathResult::NonModule(path_res) if path_res.base_def() == Def::Err => {
                 // The error was already reported earlier.
-                assert!(directive.imported_module.get().is_none());
+                assert!(!self.ambiguity_errors.is_empty() ||
+                        directive.imported_module.get().is_none());
                 return None;
             }
             PathResult::Indeterminate | PathResult::NonModule(..) => unreachable!(),
diff --git a/src/test/ui/imports/auxiliary/issue-56125.rs b/src/test/ui/imports/auxiliary/issue-56125.rs
index 0ff407756b3..8e079758297 100644
--- a/src/test/ui/imports/auxiliary/issue-56125.rs
+++ b/src/test/ui/imports/auxiliary/issue-56125.rs
@@ -1,3 +1,5 @@
+pub mod issue_56125 {}
+
 pub mod last_segment {
     pub mod issue_56125 {}
 }
diff --git a/src/test/ui/imports/issue-56125.rs b/src/test/ui/imports/issue-56125.rs
index 4baeb8a34dd..843b52f1843 100644
--- a/src/test/ui/imports/issue-56125.rs
+++ b/src/test/ui/imports/issue-56125.rs
@@ -2,11 +2,24 @@
 // compile-flags:--extern issue_56125
 // aux-build:issue-56125.rs
 
-use issue_56125::last_segment::*;
-//~^ ERROR `issue_56125` is ambiguous
-//~| ERROR unresolved import `issue_56125::last_segment`
-use issue_56125::non_last_segment::non_last_segment::*;
-//~^ ERROR `issue_56125` is ambiguous
-//~| ERROR failed to resolve: could not find `non_last_segment` in `issue_56125`
+#![feature(uniform_paths)]
+
+mod m1 {
+    use issue_56125::last_segment::*;
+    //~^ ERROR `issue_56125` is ambiguous
+    //~| ERROR unresolved import `issue_56125::last_segment`
+}
+
+mod m2 {
+    use issue_56125::non_last_segment::non_last_segment::*;
+    //~^ ERROR `issue_56125` is ambiguous
+    //~| ERROR failed to resolve: could not find `non_last_segment` in `issue_56125`
+}
+
+mod m3 {
+    mod empty {}
+    use empty::issue_56125; //~ ERROR unresolved import `empty::issue_56125`
+    use issue_56125::*; //~ ERROR `issue_56125` is ambiguous
+}
 
 fn main() {}
diff --git a/src/test/ui/imports/issue-56125.stderr b/src/test/ui/imports/issue-56125.stderr
index 096d5be97f0..b1292ef8f78 100644
--- a/src/test/ui/imports/issue-56125.stderr
+++ b/src/test/ui/imports/issue-56125.stderr
@@ -1,46 +1,67 @@
 error[E0433]: failed to resolve: could not find `non_last_segment` in `issue_56125`
-  --> $DIR/issue-56125.rs:8:18
+  --> $DIR/issue-56125.rs:14:22
    |
-LL | use issue_56125::non_last_segment::non_last_segment::*;
-   |                  ^^^^^^^^^^^^^^^^ could not find `non_last_segment` in `issue_56125`
+LL |     use issue_56125::non_last_segment::non_last_segment::*;
+   |                      ^^^^^^^^^^^^^^^^ could not find `non_last_segment` in `issue_56125`
 
 error[E0432]: unresolved import `issue_56125::last_segment`
-  --> $DIR/issue-56125.rs:5:18
+  --> $DIR/issue-56125.rs:8:22
    |
-LL | use issue_56125::last_segment::*;
-   |                  ^^^^^^^^^^^^ could not find `last_segment` in `issue_56125`
+LL |     use issue_56125::last_segment::*;
+   |                      ^^^^^^^^^^^^ could not find `last_segment` in `issue_56125`
+
+error[E0432]: unresolved import `empty::issue_56125`
+  --> $DIR/issue-56125.rs:21:9
+   |
+LL |     use empty::issue_56125; //~ ERROR unresolved import `empty::issue_56125`
+   |         ^^^^^^^^^^^^^^^^^^ no `issue_56125` in `m3::empty`
 
 error[E0659]: `issue_56125` is ambiguous (name vs any other name during import resolution)
-  --> $DIR/issue-56125.rs:5:5
+  --> $DIR/issue-56125.rs:8:9
    |
-LL | use issue_56125::last_segment::*;
-   |     ^^^^^^^^^^^ ambiguous name
+LL |     use issue_56125::last_segment::*;
+   |         ^^^^^^^^^^^ ambiguous name
    |
    = note: `issue_56125` could refer to an extern crate passed with `--extern`
    = help: use `::issue_56125` to refer to this extern crate unambiguously
 note: `issue_56125` could also refer to the module imported here
-  --> $DIR/issue-56125.rs:5:5
+  --> $DIR/issue-56125.rs:8:9
    |
-LL | use issue_56125::last_segment::*;
-   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL |     use issue_56125::last_segment::*;
+   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    = help: use `self::issue_56125` to refer to this module unambiguously
 
 error[E0659]: `issue_56125` is ambiguous (name vs any other name during import resolution)
-  --> $DIR/issue-56125.rs:8:5
+  --> $DIR/issue-56125.rs:14:9
    |
-LL | use issue_56125::non_last_segment::non_last_segment::*;
-   |     ^^^^^^^^^^^ ambiguous name
+LL |     use issue_56125::non_last_segment::non_last_segment::*;
+   |         ^^^^^^^^^^^ ambiguous name
    |
    = note: `issue_56125` could refer to an extern crate passed with `--extern`
    = help: use `::issue_56125` to refer to this extern crate unambiguously
 note: `issue_56125` could also refer to the module imported here
-  --> $DIR/issue-56125.rs:5:5
+  --> $DIR/issue-56125.rs:14:9
    |
-LL | use issue_56125::last_segment::*;
-   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL |     use issue_56125::non_last_segment::non_last_segment::*;
+   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    = help: use `self::issue_56125` to refer to this module unambiguously
 
-error: aborting due to 4 previous errors
+error[E0659]: `issue_56125` is ambiguous (name vs any other name during import resolution)
+  --> $DIR/issue-56125.rs:22:9
+   |
+LL |     use issue_56125::*; //~ ERROR `issue_56125` is ambiguous
+   |         ^^^^^^^^^^^ ambiguous name
+   |
+   = note: `issue_56125` could refer to an extern crate passed with `--extern`
+   = help: use `::issue_56125` to refer to this extern crate unambiguously
+note: `issue_56125` could also refer to the unresolved item imported here
+  --> $DIR/issue-56125.rs:21:9
+   |
+LL |     use empty::issue_56125; //~ ERROR unresolved import `empty::issue_56125`
+   |         ^^^^^^^^^^^^^^^^^^
+   = help: use `self::issue_56125` to refer to this unresolved item unambiguously
+
+error: aborting due to 6 previous errors
 
 Some errors occurred: E0432, E0433, E0659.
 For more information about an error, try `rustc --explain E0432`.