]> git.lizzy.rs Git - rust.git/commitdiff
resolve: Fix some more asserts in import validation
authorVadim Petrochenkov <vadim.petrochenkov@gmail.com>
Sun, 25 Nov 2018 02:45:43 +0000 (05:45 +0300)
committerVadim Petrochenkov <vadim.petrochenkov@gmail.com>
Sun, 25 Nov 2018 13:41:29 +0000 (16:41 +0300)
src/librustc_resolve/resolve_imports.rs
src/test/ui/imports/auxiliary/issue-56125.rs
src/test/ui/imports/issue-56125.rs
src/test/ui/imports/issue-56125.stderr

index 616cc9d2fc51b992d4c97adb2d7373395e99827d..52e3e54b9f93181090918414b7bb8c3052263cd6 100644 (file)
@@ -864,7 +864,8 @@ fn finalize_import(
             }
             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!(),
index 0ff407756b3ae6d963d9816b3bb3aeacd7ca094f..8e0797582970d9c0aa427c33a87c798517b6e02d 100644 (file)
@@ -1,3 +1,5 @@
+pub mod issue_56125 {}
+
 pub mod last_segment {
     pub mod issue_56125 {}
 }
index 4baeb8a34dd7694a1cb1427e06eaecffb806929a..843b52f18435e5ec95ec1676bdf55444ce8ec584 100644 (file)
@@ -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() {}
index 096d5be97f0e0367ac0996086353230e802fa136..b1292ef8f783e35c4b2048e53ad3f80a938a5cbc 100644 (file)
@@ -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`.