about summary refs log tree commit diff
diff options
context:
space:
mode:
authorCamelid <camelidcamel@gmail.com>2021-03-20 20:00:25 -0700
committerCamelid <camelidcamel@gmail.com>2021-03-21 14:20:28 -0700
commitbfae41d7b01f016fab65ed4be9ecdb5c31a97f09 (patch)
treec8eb5245a212c61d937c21893e44c235e7076ccd
parent61edfd591cedff66fca639c02f66984f6271e5a6 (diff)
downloadrust-bfae41d7b01f016fab65ed4be9ecdb5c31a97f09.tar.gz
rust-bfae41d7b01f016fab65ed4be9ecdb5c31a97f09.zip
Fix ICE with `use clippy::a::b;`
-rw-r--r--compiler/rustc_resolve/src/imports.rs4
-rw-r--r--src/test/ui/imports/tool-mod-child.rs7
-rw-r--r--src/test/ui/imports/tool-mod-child.stderr28
3 files changed, 37 insertions, 2 deletions
diff --git a/compiler/rustc_resolve/src/imports.rs b/compiler/rustc_resolve/src/imports.rs
index 61f4c00a4ca..26858915f45 100644
--- a/compiler/rustc_resolve/src/imports.rs
+++ b/compiler/rustc_resolve/src/imports.rs
@@ -955,14 +955,14 @@ impl<'a, 'b> ImportResolver<'a, 'b> {
                 }
                 return None;
             }
-            PathResult::NonModule(path_res) if path_res.base_res() == Res::Err => {
+            PathResult::NonModule(_) => {
                 if no_ambiguity {
                     assert!(import.imported_module.get().is_none());
                 }
                 // The error was already reported earlier.
                 return None;
             }
-            PathResult::Indeterminate | PathResult::NonModule(..) => unreachable!(),
+            PathResult::Indeterminate => unreachable!(),
         };
 
         let (ident, target, source_bindings, target_bindings, type_ns_only) = match import.kind {
diff --git a/src/test/ui/imports/tool-mod-child.rs b/src/test/ui/imports/tool-mod-child.rs
new file mode 100644
index 00000000000..4581dc2e2ad
--- /dev/null
+++ b/src/test/ui/imports/tool-mod-child.rs
@@ -0,0 +1,7 @@
+use clippy::a; //~ ERROR unresolved import `clippy`
+use clippy::a::b; //~ ERROR failed to resolve: maybe a missing crate `clippy`?
+
+use rustdoc::a; //~ ERROR unresolved import `rustdoc`
+use rustdoc::a::b; //~ ERROR failed to resolve: maybe a missing crate `rustdoc`?
+
+fn main() {}
diff --git a/src/test/ui/imports/tool-mod-child.stderr b/src/test/ui/imports/tool-mod-child.stderr
new file mode 100644
index 00000000000..efab4f6a74f
--- /dev/null
+++ b/src/test/ui/imports/tool-mod-child.stderr
@@ -0,0 +1,28 @@
+error[E0433]: failed to resolve: maybe a missing crate `clippy`?
+  --> $DIR/tool-mod-child.rs:2:5
+   |
+LL | use clippy::a::b;
+   |     ^^^^^^ maybe a missing crate `clippy`?
+
+error[E0432]: unresolved import `clippy`
+  --> $DIR/tool-mod-child.rs:1:5
+   |
+LL | use clippy::a;
+   |     ^^^^^^ maybe a missing crate `clippy`?
+
+error[E0433]: failed to resolve: maybe a missing crate `rustdoc`?
+  --> $DIR/tool-mod-child.rs:5:5
+   |
+LL | use rustdoc::a::b;
+   |     ^^^^^^^ maybe a missing crate `rustdoc`?
+
+error[E0432]: unresolved import `rustdoc`
+  --> $DIR/tool-mod-child.rs:4:5
+   |
+LL | use rustdoc::a;
+   |     ^^^^^^^ maybe a missing crate `rustdoc`?
+
+error: aborting due to 4 previous errors
+
+Some errors have detailed explanations: E0432, E0433.
+For more information about an error, try `rustc --explain E0432`.