diff options
| author | Michael Goulet <michael@errs.io> | 2022-08-05 23:51:33 +0000 |
|---|---|---|
| committer | Michael Goulet <michael@errs.io> | 2022-08-05 23:53:29 +0000 |
| commit | 315d12d73d511efb277426c813e5d40157a0d70a (patch) | |
| tree | f5aad51c1f96be56f5c8c7dab28976a00085ef25 | |
| parent | d77da9da84fc89908ad01578c33c2dca8f597ffe (diff) | |
| download | rust-315d12d73d511efb277426c813e5d40157a0d70a.tar.gz rust-315d12d73d511efb277426c813e5d40157a0d70a.zip | |
Fix ReErased leaking into typeck due to typeof recovery
| -rw-r--r-- | compiler/rustc_typeck/src/astconv/mod.rs | 5 | ||||
| -rw-r--r-- | src/test/ui/typeof/issue-100183.rs | 6 | ||||
| -rw-r--r-- | src/test/ui/typeof/issue-100183.stderr | 14 |
3 files changed, 24 insertions, 1 deletions
diff --git a/compiler/rustc_typeck/src/astconv/mod.rs b/compiler/rustc_typeck/src/astconv/mod.rs index 8a5c7fee697..c094594648c 100644 --- a/compiler/rustc_typeck/src/astconv/mod.rs +++ b/compiler/rustc_typeck/src/astconv/mod.rs @@ -2667,7 +2667,10 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o { self.normalize_ty(ast_ty.span, array_ty) } hir::TyKind::Typeof(ref e) => { - let ty = tcx.type_of(tcx.hir().local_def_id(e.hir_id)); + let ty_erased = tcx.type_of(tcx.hir().local_def_id(e.hir_id)); + let ty = tcx.fold_regions(ty_erased, |r, _| { + if r.is_erased() { tcx.lifetimes.re_static } else { r } + }); let span = ast_ty.span; tcx.sess.emit_err(TypeofReservedKeywordUsed { span, diff --git a/src/test/ui/typeof/issue-100183.rs b/src/test/ui/typeof/issue-100183.rs new file mode 100644 index 00000000000..13e9493eaa5 --- /dev/null +++ b/src/test/ui/typeof/issue-100183.rs @@ -0,0 +1,6 @@ +struct Struct { + y: (typeof("hey"),), + //~^ ERROR `typeof` is a reserved keyword but unimplemented +} + +fn main() {} diff --git a/src/test/ui/typeof/issue-100183.stderr b/src/test/ui/typeof/issue-100183.stderr new file mode 100644 index 00000000000..01d3079b246 --- /dev/null +++ b/src/test/ui/typeof/issue-100183.stderr @@ -0,0 +1,14 @@ +error[E0516]: `typeof` is a reserved keyword but unimplemented + --> $DIR/issue-100183.rs:2:9 + | +LL | y: (typeof("hey"),), + | ^^^^^^^^^^^^^ reserved keyword + | +help: consider replacing `typeof(...)` with an actual type + | +LL | y: (&'static str,), + | ~~~~~~~~~~~~ + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0516`. |
