resolve: Fix regression in resolution of raw keywords in paths

This commit is contained in:
Vadim Petrochenkov 2020-03-14 15:28:17 +03:00
parent 42ce9b4e90
commit e80cb2032c
7 changed files with 29 additions and 10 deletions

View File

@ -2183,11 +2183,8 @@ impl<'a> Resolver<'a> {
Applicability::MaybeIncorrect,
)),
)
} else if !ident.is_reserved() {
(format!("maybe a missing crate `{}`?", ident), None)
} else {
// the parser will already have complained about the keyword being used
return PathResult::NonModule(PartialRes::new(Res::Err));
(format!("maybe a missing crate `{}`?", ident), None)
}
} else if i == 0 {
(format!("use of undeclared type or module `{}`", ident), None)

View File

@ -1,4 +1,4 @@
// This previously triggered an ICE.
pub(in crate::r#mod) fn main() {}
//~^ ERROR expected module, found unresolved item
//~^ ERROR failed to resolve: maybe a missing crate `r#mod`

View File

@ -1,11 +1,11 @@
error[E0577]: expected module, found unresolved item `crate::r#mod`
--> $DIR/issue-61732.rs:3:8
error[E0433]: failed to resolve: maybe a missing crate `r#mod`?
--> $DIR/issue-61732.rs:3:15
|
LL | pub(in crate::r#mod) fn main() {}
| ^^^^^^^^^^^^ not a module
| ^^^^^ maybe a missing crate `r#mod`?
error: Compilation failed, aborting rustdoc
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0577`.
For more information about this error, try `rustc --explain E0433`.

View File

@ -1,3 +1,4 @@
use extern::foo; //~ ERROR expected identifier, found keyword `extern`
//~| ERROR unresolved import `r#extern`
fn main() {}

View File

@ -9,5 +9,12 @@ help: you can escape reserved keywords to use them as identifiers
LL | use r#extern::foo;
| ^^^^^^^^
error: aborting due to previous error
error[E0432]: unresolved import `r#extern`
--> $DIR/keyword-extern-as-identifier-use.rs:1:5
|
LL | use extern::foo;
| ^^^^^^ maybe a missing crate `r#extern`?
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0432`.

View File

@ -0,0 +1,5 @@
// Regression test for issue #63882.
type A = crate::r#break; //~ ERROR cannot find type `r#break` in module `crate`
fn main() {}

View File

@ -0,0 +1,9 @@
error[E0412]: cannot find type `r#break` in module `crate`
--> $DIR/raw-ident-in-path.rs:3:17
|
LL | type A = crate::r#break;
| ^^^^^^^ not found in `crate`
error: aborting due to previous error
For more information about this error, try `rustc --explain E0412`.