From 3f849a8b1edb11762194ef6f0f153a0e672c9112 Mon Sep 17 00:00:00 2001 From: Ben Reeves Date: Mon, 27 Dec 2021 00:24:19 -0600 Subject: [PATCH] Add test for old ICE in #89066 --- src/test/ui/save-analysis/issue-89066.rs | 28 ++++++++++++++ src/test/ui/save-analysis/issue-89066.stderr | 39 ++++++++++++++++++++ 2 files changed, 67 insertions(+) create mode 100644 src/test/ui/save-analysis/issue-89066.rs create mode 100644 src/test/ui/save-analysis/issue-89066.stderr diff --git a/src/test/ui/save-analysis/issue-89066.rs b/src/test/ui/save-analysis/issue-89066.rs new file mode 100644 index 0000000000000..2873f5237d4a1 --- /dev/null +++ b/src/test/ui/save-analysis/issue-89066.rs @@ -0,0 +1,28 @@ +// compile-flags: -Zsave-analysis + +// Check that this does not ICE. +// Stolen from src/test/ui/const-generics/generic_arg_infer/infer-arg-test.rs + +#![feature(generic_arg_infer)] + +struct All<'a, T, const N: usize> { + v: &'a T, +} + +struct BadInfer<_>; +//~^ ERROR expected identifier +//~| ERROR parameter `_` is never used + +fn all_fn<'a, T, const N: usize>() {} + +fn bad_infer_fn<_>() {} +//~^ ERROR expected identifier + + +fn main() { + let a: All<_, _, _>; + //~^ ERROR this struct takes 2 generic arguments but 3 generic arguments were supplied + all_fn(); + let v: [u8; _]; + let v: [u8; 10] = [0; _]; +} diff --git a/src/test/ui/save-analysis/issue-89066.stderr b/src/test/ui/save-analysis/issue-89066.stderr new file mode 100644 index 0000000000000..a3ff1c02b2a04 --- /dev/null +++ b/src/test/ui/save-analysis/issue-89066.stderr @@ -0,0 +1,39 @@ +error: expected identifier, found reserved identifier `_` + --> $DIR/issue-89066.rs:12:17 + | +LL | struct BadInfer<_>; + | ^ expected identifier, found reserved identifier + +error: expected identifier, found reserved identifier `_` + --> $DIR/issue-89066.rs:18:17 + | +LL | fn bad_infer_fn<_>() {} + | ^ expected identifier, found reserved identifier + +error[E0392]: parameter `_` is never used + --> $DIR/issue-89066.rs:12:17 + | +LL | struct BadInfer<_>; + | ^ unused parameter + | + = help: consider removing `_`, referring to it in a field, or using a marker such as `PhantomData` + = help: if you intended `_` to be a const parameter, use `const _: usize` instead + +error[E0107]: this struct takes 2 generic arguments but 3 generic arguments were supplied + --> $DIR/issue-89066.rs:23:10 + | +LL | let a: All<_, _, _>; + | ^^^ - help: remove this generic argument + | | + | expected 2 generic arguments + | +note: struct defined here, with 2 generic parameters: `T`, `N` + --> $DIR/issue-89066.rs:8:8 + | +LL | struct All<'a, T, const N: usize> { + | ^^^ - - + +error: aborting due to 4 previous errors + +Some errors have detailed explanations: E0107, E0392. +For more information about an error, try `rustc --explain E0107`.