From dd68685e48db23b340ec31024c4c4aa2d6180a16 Mon Sep 17 00:00:00 2001 From: Vadim Petrochenkov Date: Tue, 30 Oct 2018 00:21:39 +0300 Subject: [PATCH] resolve: Fix ICE in macro import error recovery --- src/librustc_resolve/macros.rs | 3 +++ src/test/ui/imports/issue-55457.rs | 8 +++++++ src/test/ui/imports/issue-55457.stderr | 31 ++++++++++++++++++++++++++ 3 files changed, 42 insertions(+) create mode 100644 src/test/ui/imports/issue-55457.rs create mode 100644 src/test/ui/imports/issue-55457.stderr diff --git a/src/librustc_resolve/macros.rs b/src/librustc_resolve/macros.rs index d5f344346c2d1..43a5fdb7a025f 100644 --- a/src/librustc_resolve/macros.rs +++ b/src/librustc_resolve/macros.rs @@ -449,6 +449,9 @@ impl<'a, 'cl> Resolver<'a, 'cl> { return Err(Determinacy::Determined); } } + Def::Err => { + return Err(Determinacy::Determined); + } _ => panic!("expected `Def::Macro` or `Def::NonMacroAttr`"), } diff --git a/src/test/ui/imports/issue-55457.rs b/src/test/ui/imports/issue-55457.rs new file mode 100644 index 0000000000000..9c6750fd48c26 --- /dev/null +++ b/src/test/ui/imports/issue-55457.rs @@ -0,0 +1,8 @@ +use NonExistent; //~ ERROR unresolved import `NonExistent` +use non_existent::non_existent; //~ ERROR unresolved import `non_existent` + +#[non_existent] //~ ERROR cannot determine resolution for the attribute macro `non_existent` +#[derive(NonExistent)] //~ ERROR cannot determine resolution for the derive macro `NonExistent` +struct S; + +fn main() {} diff --git a/src/test/ui/imports/issue-55457.stderr b/src/test/ui/imports/issue-55457.stderr new file mode 100644 index 0000000000000..363dec06237f4 --- /dev/null +++ b/src/test/ui/imports/issue-55457.stderr @@ -0,0 +1,31 @@ +error[E0432]: unresolved import `NonExistent` + --> $DIR/issue-55457.rs:1:5 + | +LL | use NonExistent; //~ ERROR unresolved import `NonExistent` + | ^^^^^^^^^^^ no `NonExistent` in the root. Did you mean to use `non_existent`? + +error[E0432]: unresolved import `non_existent` + --> $DIR/issue-55457.rs:2:5 + | +LL | use non_existent::non_existent; //~ ERROR unresolved import `non_existent` + | ^^^^^^^^^^^^ Maybe a missing `extern crate non_existent;`? + +error: cannot determine resolution for the derive macro `NonExistent` + --> $DIR/issue-55457.rs:5:10 + | +LL | #[derive(NonExistent)] //~ ERROR cannot determine resolution for the derive macro `NonExistent` + | ^^^^^^^^^^^ + | + = note: import resolution is stuck, try simplifying macro imports + +error: cannot determine resolution for the attribute macro `non_existent` + --> $DIR/issue-55457.rs:4:3 + | +LL | #[non_existent] //~ ERROR cannot determine resolution for the attribute macro `non_existent` + | ^^^^^^^^^^^^ + | + = note: import resolution is stuck, try simplifying macro imports + +error: aborting due to 4 previous errors + +For more information about this error, try `rustc --explain E0432`.