diff options
| author | ranger-ross <rosssullivan101@gmail.com> | 2024-11-02 17:17:53 +0900 |
|---|---|---|
| committer | ranger-ross <rosssullivan101@gmail.com> | 2024-11-02 22:17:46 +0900 |
| commit | b9196757a0c2c9ddbbca4372ca272b0e1fec077f (patch) | |
| tree | 6165de361ea84b816a3ea3f1b2b6c9ea4d887f1d | |
| parent | ef972a346668ed4234d1a43ed4ad7ca4e9c58d51 (diff) | |
| download | rust-b9196757a0c2c9ddbbca4372ca272b0e1fec077f.tar.gz rust-b9196757a0c2c9ddbbca4372ca272b0e1fec077f.zip | |
Added regression test for 117446
| -rw-r--r-- | tests/ui/traits/ice-index-out-of-bounds-issue-117446.rs | 24 | ||||
| -rw-r--r-- | tests/ui/traits/ice-index-out-of-bounds-issue-117446.stderr | 33 |
2 files changed, 57 insertions, 0 deletions
diff --git a/tests/ui/traits/ice-index-out-of-bounds-issue-117446.rs b/tests/ui/traits/ice-index-out-of-bounds-issue-117446.rs new file mode 100644 index 00000000000..fa31d8b820c --- /dev/null +++ b/tests/ui/traits/ice-index-out-of-bounds-issue-117446.rs @@ -0,0 +1,24 @@ +//@ check-fail +// +// Regression for https://github.com/rust-lang/rust/issues/117446 + +pub struct Repeated<T>(Vec<T>); + +trait Foo<'a> { + fn outer<D>() -> Option<()>; +} + +impl<'a, T> Foo<'a> for Repeated<T> { + fn outer() -> Option<()> { + //~^ ERROR associated function `outer` has 0 type parameters but its trait declaration has 1 type parameter [E0049] + //~^^ ERROR mismatched types [E0308] + fn inner<Q>(value: Option<()>) -> Repeated<Q> { + match value { + _ => Self(unimplemented!()), + //~^ ERROR can't reference `Self` constructor from outer item [E0401] + } + } + } +} + +fn main() {} diff --git a/tests/ui/traits/ice-index-out-of-bounds-issue-117446.stderr b/tests/ui/traits/ice-index-out-of-bounds-issue-117446.stderr new file mode 100644 index 00000000000..ad33a70ed3b --- /dev/null +++ b/tests/ui/traits/ice-index-out-of-bounds-issue-117446.stderr @@ -0,0 +1,33 @@ +error[E0049]: associated function `outer` has 0 type parameters but its trait declaration has 1 type parameter + --> $DIR/ice-index-out-of-bounds-issue-117446.rs:12:13 + | +LL | fn outer<D>() -> Option<()>; + | - expected 1 type parameter +... +LL | fn outer() -> Option<()> { + | ^ found 0 type parameters + +error[E0308]: mismatched types + --> $DIR/ice-index-out-of-bounds-issue-117446.rs:12:19 + | +LL | fn outer() -> Option<()> { + | ----- ^^^^^^^^^^ expected `Option<()>`, found `()` + | | + | implicitly returns `()` as its body has no tail or `return` expression + | + = note: expected enum `Option<()>` + found unit type `()` + +error[E0401]: can't reference `Self` constructor from outer item + --> $DIR/ice-index-out-of-bounds-issue-117446.rs:17:22 + | +LL | impl<'a, T> Foo<'a> for Repeated<T> { + | ----------------------------------- the inner item doesn't inherit generics from this impl, so `Self` is invalid to reference +... +LL | _ => Self(unimplemented!()), + | ^^^^ help: replace `Self` with the actual type: `Repeated` + +error: aborting due to 3 previous errors + +Some errors have detailed explanations: E0049, E0308, E0401. +For more information about an error, try `rustc --explain E0049`. |
