From 0f8513a51c7560d0e381198d607dfcc91e8ef36d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matthias=20Kr=C3=BCger?= <matthias.krueger@famsik.de>
Date: Sat, 8 Jun 2024 18:36:21 +0200
Subject: [PATCH] tests: add more crashes

---
 tests/crashes/125655.rs |  8 ++++++++
 tests/crashes/125680.rs | 15 +++++++++++++++
 tests/crashes/125758.rs | 26 ++++++++++++++++++++++++++
 tests/crashes/125768.rs | 15 +++++++++++++++
 tests/crashes/125769.rs | 14 ++++++++++++++
 tests/crashes/125772.rs | 17 +++++++++++++++++
 tests/crashes/125799.rs | 22 ++++++++++++++++++++++
 tests/crashes/125801.rs | 20 ++++++++++++++++++++
 tests/crashes/125810.rs | 10 ++++++++++
 tests/crashes/125811.rs | 34 ++++++++++++++++++++++++++++++++++
 tests/crashes/125841.rs | 14 ++++++++++++++
 tests/crashes/125843.rs |  4 ++++
 tests/crashes/125874.rs | 22 ++++++++++++++++++++++
 tests/crashes/125879.rs | 18 ++++++++++++++++++
 tests/crashes/125881.rs |  8 ++++++++
 tests/crashes/125888.rs | 17 +++++++++++++++++
 tests/crashes/125914.rs | 20 ++++++++++++++++++++
 tests/crashes/125957.rs | 20 ++++++++++++++++++++
 tests/crashes/125992.rs | 19 +++++++++++++++++++
 19 files changed, 323 insertions(+)
 create mode 100644 tests/crashes/125655.rs
 create mode 100644 tests/crashes/125680.rs
 create mode 100644 tests/crashes/125758.rs
 create mode 100644 tests/crashes/125768.rs
 create mode 100644 tests/crashes/125769.rs
 create mode 100644 tests/crashes/125772.rs
 create mode 100644 tests/crashes/125799.rs
 create mode 100644 tests/crashes/125801.rs
 create mode 100644 tests/crashes/125810.rs
 create mode 100644 tests/crashes/125811.rs
 create mode 100644 tests/crashes/125841.rs
 create mode 100644 tests/crashes/125843.rs
 create mode 100644 tests/crashes/125874.rs
 create mode 100644 tests/crashes/125879.rs
 create mode 100644 tests/crashes/125881.rs
 create mode 100644 tests/crashes/125888.rs
 create mode 100644 tests/crashes/125914.rs
 create mode 100644 tests/crashes/125957.rs
 create mode 100644 tests/crashes/125992.rs

diff --git a/tests/crashes/125655.rs b/tests/crashes/125655.rs
new file mode 100644
index 00000000000..fbf92ca22be
--- /dev/null
+++ b/tests/crashes/125655.rs
@@ -0,0 +1,8 @@
+//@ known-bug: rust-lang/rust#125655
+
+fn main() {
+    static foo: dyn Fn() -> u32 = || -> u32 {
+        ...
+        0
+    };
+}
diff --git a/tests/crashes/125680.rs b/tests/crashes/125680.rs
new file mode 100644
index 00000000000..09f4f318bdd
--- /dev/null
+++ b/tests/crashes/125680.rs
@@ -0,0 +1,15 @@
+//@ known-bug: rust-lang/rust#125680
+//@ edition:2021
+
+#![feature(generic_const_exprs)]
+
+use core::fmt::Debug;
+
+struct Inline<T>
+where
+    [(); std::mem::offset_of!((T,), 0)]:,
+{}
+
+fn main() {
+    let dst = Inline::<dyn Debug>::new(0); // BANG!
+}
diff --git a/tests/crashes/125758.rs b/tests/crashes/125758.rs
new file mode 100644
index 00000000000..86c3b80abab
--- /dev/null
+++ b/tests/crashes/125758.rs
@@ -0,0 +1,26 @@
+//@ known-bug: rust-lang/rust#125758
+#![feature(impl_trait_in_assoc_type)]
+
+trait Trait: Sized {
+    type Assoc2;
+}
+
+impl Trait for Bar {
+    type Assoc2 = impl std::fmt::Debug;
+}
+
+struct Foo {
+    field: <Bar as Trait>::Assoc2,
+}
+
+enum Bar {
+    C = 42,
+    D = 99,
+}
+
+static BAR: u8 = 42;
+
+static FOO2: (&Foo, &<Bar as Trait>::Assoc2) =
+    unsafe { (std::mem::transmute(&BAR), std::mem::transmute(&BAR)) };
+
+fn main() {}
diff --git a/tests/crashes/125768.rs b/tests/crashes/125768.rs
new file mode 100644
index 00000000000..3c04431baa0
--- /dev/null
+++ b/tests/crashes/125768.rs
@@ -0,0 +1,15 @@
+//@ known-bug: rust-lang/rust#125768
+
+#![feature(generic_const_exprs)]
+
+struct Outer<const A: i64, const B: usize>();
+impl<const A: usize, const B: usize> Outer<A, B>
+where
+    [(); A + (B * 2)]:,
+{
+    fn o() -> Union {}
+}
+
+fn main() {
+    Outer::<1, 1>::o();
+}
diff --git a/tests/crashes/125769.rs b/tests/crashes/125769.rs
new file mode 100644
index 00000000000..da19458f7ca
--- /dev/null
+++ b/tests/crashes/125769.rs
@@ -0,0 +1,14 @@
+//@ known-bug: rust-lang/rust#125769
+
+#![feature(generic_const_exprs)]
+
+trait Trait {}
+
+struct HasCastInTraitImpl<const N: usize, const M: u128>;
+impl<const O: f64> Trait for HasCastInTraitImpl<O, { O as u128 }> {}
+
+pub fn use_trait_impl() {
+    fn assert_impl<T: Trait>() {}
+
+    assert_impl::<HasCastInTraitImpl<13, 13>>();
+}
diff --git a/tests/crashes/125772.rs b/tests/crashes/125772.rs
new file mode 100644
index 00000000000..2965cfc9e7c
--- /dev/null
+++ b/tests/crashes/125772.rs
@@ -0,0 +1,17 @@
+//@ known-bug: rust-lang/rust#125772
+//@ only-x86_64
+#![feature(generic_const_exprs)]
+
+struct Outer<const A: i64, const B: i64>();
+impl<const A: usize, const B: usize> Outer<A, B>
+where
+    [(); A + (B * 2)]:,
+{
+    fn i() -> Self {
+        Self
+    }
+}
+
+fn main() {
+    Outer::<1, 1>::o();
+}
diff --git a/tests/crashes/125799.rs b/tests/crashes/125799.rs
new file mode 100644
index 00000000000..62d5438b4e4
--- /dev/null
+++ b/tests/crashes/125799.rs
@@ -0,0 +1,22 @@
+//@ known-bug: rust-lang/rust#125799
+//@ only-x86_64
+
+trait Trait<T> {
+    type Assoc;
+}
+
+impl<T> Trait<T> for Vec<T> {
+    type Assoc = ();
+}
+
+impl Trait<u8> for Vec<u8> {}
+
+const BAR: <Vec<u8> as Trait<u8>>::Assoc = 3;
+
+pub fn main() {
+    let x: isize = 3;
+    let _ = match x {
+        BAR => 2,
+        _ => 3,
+    };
+}
diff --git a/tests/crashes/125801.rs b/tests/crashes/125801.rs
new file mode 100644
index 00000000000..aaa76bd0ba6
--- /dev/null
+++ b/tests/crashes/125801.rs
@@ -0,0 +1,20 @@
+//@ known-bug: rust-lang/rust#125801
+
+#![feature(generic_const_exprs)]
+#![allow(incomplete_features)]
+
+trait Foo {
+    type Output;
+}
+
+impl Foo for [u8; 3] {
+    type Output = [u8; 3];
+}
+
+static A: <[u8; N] as Foo>::Output = [1, 2, 3];
+
+fn main() {
+    || {
+        let _ = A[1];
+    };
+}
diff --git a/tests/crashes/125810.rs b/tests/crashes/125810.rs
new file mode 100644
index 00000000000..4a152da8ddf
--- /dev/null
+++ b/tests/crashes/125810.rs
@@ -0,0 +1,10 @@
+//@ known-bug: rust-lang/rust#125810
+#![feature(arbitrary_self_types, dispatch_from_dyn)]
+
+use std::ops::{Deref, DispatchFromDyn};
+
+trait Trait<T: Deref<Target = Self> + DispatchFromDyn<T>> {
+    fn MONO_BUF(self: T) -> dyn Trait<T>;
+}
+
+fn main() {}
diff --git a/tests/crashes/125811.rs b/tests/crashes/125811.rs
new file mode 100644
index 00000000000..eb764e8d152
--- /dev/null
+++ b/tests/crashes/125811.rs
@@ -0,0 +1,34 @@
+//@ known-bug: rust-lang/rust#125811
+mod assert {
+    use std::mem::{Assume, BikeshedIntrinsicFrom};
+
+    pub fn is_transmutable<Src, Dst>()
+    where
+        Dst: BikeshedIntrinsicFrom<Src>,
+    {
+    }
+}
+
+#[repr(C)]
+struct Zst;
+
+enum V0 {
+    B(!),
+}
+
+enum V2 {
+    V = 2,
+}
+
+enum Lopsided {
+    Smol(Zst),
+    Lorg(V0),
+}
+
+#[repr(C)]
+#[repr(C)]
+struct Dst(Lopsided, V2);
+
+fn should_pad_variants() {
+    assert::is_transmutable::<Src, Dst>();
+}
diff --git a/tests/crashes/125841.rs b/tests/crashes/125841.rs
new file mode 100644
index 00000000000..e2e61071f1d
--- /dev/null
+++ b/tests/crashes/125841.rs
@@ -0,0 +1,14 @@
+//@ known-bug: rust-lang/rust#125841
+#![feature(non_lifetime_binders)]
+fn take(id: impl for<T> Fn(T) -> T) {
+    id(0);
+    id("");
+}
+
+fn take2() -> impl for<T> Fn(T) -> T {
+    |x| x
+}
+
+fn main() {
+    take(|x| take2)
+}
diff --git a/tests/crashes/125843.rs b/tests/crashes/125843.rs
new file mode 100644
index 00000000000..8b9a3913c7e
--- /dev/null
+++ b/tests/crashes/125843.rs
@@ -0,0 +1,4 @@
+//@ known-bug: rust-lang/rust#125843
+#![feature(non_lifetime_binders)]
+trait v0<> {}
+fn kind  :(v3main impl for<v4> v0<'_, v2 = impl v0<v4> + '_>) {}
diff --git a/tests/crashes/125874.rs b/tests/crashes/125874.rs
new file mode 100644
index 00000000000..6a2713cd7c8
--- /dev/null
+++ b/tests/crashes/125874.rs
@@ -0,0 +1,22 @@
+//@ known-bug: rust-lang/rust#125874
+pub trait A {}
+
+pub trait Mirror {
+    type Assoc: ?Sized;
+}
+impl<T: ?Sized> Mirror for dyn A {
+    type Assoc = T;
+}
+
+struct Bar {
+    foo: <dyn A + 'static as Mirror>::Assoc,
+}
+
+pub fn main() {
+    let strct = Bar { foo: 3 };
+
+    match strct {
+        Bar { foo: 1, .. } => {}
+        _ => (),
+    };
+}
diff --git a/tests/crashes/125879.rs b/tests/crashes/125879.rs
new file mode 100644
index 00000000000..4318842e455
--- /dev/null
+++ b/tests/crashes/125879.rs
@@ -0,0 +1,18 @@
+//@ known-bug: rust-lang/rust#125879
+#![feature(inherent_associated_types)]
+#![allow(incomplete_features)]
+
+pub type PubAlias0 = PubTy::PrivAssocTy;
+
+pub struct PubTy;
+impl PubTy {
+    type PrivAssocTy = ();
+}
+
+pub struct S(pub PubAlias0);
+
+pub unsafe fn foo(a: S) -> S {
+    a
+}
+
+fn main() {}
diff --git a/tests/crashes/125881.rs b/tests/crashes/125881.rs
new file mode 100644
index 00000000000..98331d3c974
--- /dev/null
+++ b/tests/crashes/125881.rs
@@ -0,0 +1,8 @@
+//@ known-bug: rust-lang/rust#125881
+#![crate_type = "lib"]
+#![feature(transmutability)]
+#![feature(unboxed_closures,effects)]
+
+const fn test() -> impl std::mem::BikeshedIntrinsicFrom() {
+    || {}
+}
diff --git a/tests/crashes/125888.rs b/tests/crashes/125888.rs
new file mode 100644
index 00000000000..ae8f2d6576b
--- /dev/null
+++ b/tests/crashes/125888.rs
@@ -0,0 +1,17 @@
+//@ known-bug: rust-lang/rust#125888
+enum NestedEnum {
+    First,
+    Second,
+}
+
+enum Enum {
+    Variant(*const &'a ()),
+}
+
+fn foo(x: Enum) {
+    match x {
+        Enum::Variant(NestedEnum::Second) => {}
+    }
+}
+
+fn main() {}
diff --git a/tests/crashes/125914.rs b/tests/crashes/125914.rs
new file mode 100644
index 00000000000..77ccb9fb097
--- /dev/null
+++ b/tests/crashes/125914.rs
@@ -0,0 +1,20 @@
+//@ known-bug: rust-lang/rust#125914
+enum AstKind<'ast> {
+    ExprInt,
+}
+
+enum Foo {
+    Bar(isize),
+    Baz,
+}
+
+enum Other {
+    Other1(Foo),
+    Other2(AstKind),
+}
+
+fn main() {
+    match Other::Other1(Foo::Baz) {
+        ::Other::Other2(::Foo::Bar(..)) => {}
+    }
+}
diff --git a/tests/crashes/125957.rs b/tests/crashes/125957.rs
new file mode 100644
index 00000000000..e3abe5262eb
--- /dev/null
+++ b/tests/crashes/125957.rs
@@ -0,0 +1,20 @@
+//@ known-bug: rust-lang/rust#125957
+#![feature(generic_const_exprs)]
+#![allow(incomplete_features)]
+#![feature(associated_const_equality)]
+
+pub struct Equal<const T: usize, const R: usize>();
+
+pub enum ParseMode {
+    Raw,
+}
+pub trait Parse {
+    const PARSE_MODE: ParseMode;
+}
+pub trait RenderRaw: Parse<PARSE_MODE = { ParseMode::Raw }> {}
+
+trait GenericVec<T> {
+    fn unwrap() -> dyn RenderRaw;
+}
+
+fn main() {}
diff --git a/tests/crashes/125992.rs b/tests/crashes/125992.rs
new file mode 100644
index 00000000000..d78f28ce6de
--- /dev/null
+++ b/tests/crashes/125992.rs
@@ -0,0 +1,19 @@
+//@ known-bug: rust-lang/rust#125992
+//@ compile-flags:  -Zpolonius=next
+
+#![feature(inherent_associated_types)]
+
+type Function = for<'a> fn(&'a i32) -> S<'a>::P;
+
+struct S<'a>(&'a ());
+
+impl<'a> S {
+    type P = &'a i32;
+}
+
+fn ret_ref_local<'e>() -> &'e i32 {
+    let f: Function = |x| x;
+
+    let local = 0;
+    f(&local)
+}