about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMatthias Krüger <matthias.krueger@famsik.de>2025-04-15 22:46:29 +0200
committerMatthias Krüger <matthias.krueger@famsik.de>2025-05-01 17:04:37 +0200
commitc1f2ad2d16cdedd6cf82fe551fb2e8c05def36e5 (patch)
treee521377115f0459461fd72bb510bb8a6db61c21d
parent25cdf1f67463c9365d8d83778c933ec7480e940b (diff)
downloadrust-c1f2ad2d16cdedd6cf82fe551fb2e8c05def36e5.tar.gz
rust-c1f2ad2d16cdedd6cf82fe551fb2e8c05def36e5.zip
crashes: more tests
-rw-r--r--tests/crashes/138156.rs42
-rw-r--r--tests/crashes/138240.rs9
-rw-r--r--tests/crashes/138265.rs12
-rw-r--r--tests/crashes/138266.rs7
-rw-r--r--tests/crashes/138359.rs8
-rw-r--r--tests/crashes/138361.rs6
-rw-r--r--tests/crashes/138510.rs7
-rw-r--r--tests/crashes/138534.rs6
-rw-r--r--tests/crashes/138564.rs26
-rw-r--r--tests/crashes/138707.rs37
-rw-r--r--tests/crashes/138738.rs7
-rw-r--r--tests/crashes/139089.rs2
-rw-r--r--tests/crashes/139120.rs29
-rw-r--r--tests/crashes/139381.rs13
-rw-r--r--tests/crashes/139387.rs15
-rw-r--r--tests/crashes/139409.rs12
-rw-r--r--tests/crashes/139462.rs8
-rw-r--r--tests/crashes/139556.rs13
-rw-r--r--tests/crashes/139570.rs4
-rw-r--r--tests/crashes/139596.rs10
-rw-r--r--tests/crashes/139659.rs29
-rw-r--r--tests/crashes/139738.rs3
-rw-r--r--tests/crashes/139815.rs14
-rw-r--r--tests/crashes/139817.rs8
-rw-r--r--tests/crashes/139825.rs5
25 files changed, 332 insertions, 0 deletions
diff --git a/tests/crashes/138156.rs b/tests/crashes/138156.rs
new file mode 100644
index 00000000000..48c6455627f
--- /dev/null
+++ b/tests/crashes/138156.rs
@@ -0,0 +1,42 @@
+//@ known-bug: #138156
+
+#![feature(generic_const_exprs)]
+
+#[derive(Default)]
+pub struct GenId<const IDX: usize>;
+
+pub trait IndexTrait: Default {
+    const IDX: usize;
+}
+pub trait ToplogyIndex {
+    type Idx: IndexTrait;
+}
+
+#[derive(Default)]
+pub struct Expression<T: ToplogyIndex> {
+    pub data: T,
+}
+
+fn i<T: ToplogyIndex, const IDX0: usize, const IDX1: usize>(s: Expression<T>) ->
+    Expression<GenId<{ IDX0 | IDX1 }>>
+where
+    GenId<{ IDX0 | IDX1 }>: ToplogyIndex,
+{
+    Expression::default()
+}
+
+pub fn sum<In: ToplogyIndex>(s: Expression<In>) -> Expression<In>
+where
+    [(); In::Idx::IDX]:,
+{
+    s
+}
+
+fn param_position<In: ToplogyIndex>(s: Expression<In>)
+where
+    GenId<{ 1 | 2 }>: ToplogyIndex,
+{
+    sum(i::<_, 1, 2>(s));
+}
+
+fn main() {}
diff --git a/tests/crashes/138240.rs b/tests/crashes/138240.rs
new file mode 100644
index 00000000000..6ffb7868bd5
--- /dev/null
+++ b/tests/crashes/138240.rs
@@ -0,0 +1,9 @@
+//@ known-bug: #138240
+//@edition:2024
+#![feature(min_generic_const_args)]
+#![feature(inherent_associated_types)]
+async fn _CF() -> Box<[u8; Box::b]> {
+    Box::new(true)
+}
+
+fn main() {}
diff --git a/tests/crashes/138265.rs b/tests/crashes/138265.rs
new file mode 100644
index 00000000000..f6c8ea74889
--- /dev/null
+++ b/tests/crashes/138265.rs
@@ -0,0 +1,12 @@
+//@ known-bug: #138265
+
+#![feature(coerce_unsized)]
+#![crate_type = "lib"]
+impl<A> std::ops::CoerceUnsized<A> for A {}
+pub fn f() {
+    [0; {
+        let mut c = &0;
+        c = &0;
+        0
+    }]
+}
diff --git a/tests/crashes/138266.rs b/tests/crashes/138266.rs
new file mode 100644
index 00000000000..9a4de9abcff
--- /dev/null
+++ b/tests/crashes/138266.rs
@@ -0,0 +1,7 @@
+//@ known-bug: #138266
+//@compile-flags: --crate-type=lib
+#![feature(min_generic_const_args)]
+#![feature(inherent_associated_types)]
+pub fn f(mut x: [u8; Box::b]) {
+    x[72] = 1;
+}
diff --git a/tests/crashes/138359.rs b/tests/crashes/138359.rs
new file mode 100644
index 00000000000..d4376d536ee
--- /dev/null
+++ b/tests/crashes/138359.rs
@@ -0,0 +1,8 @@
+//@ known-bug: #138359
+#![feature(min_generic_const_args)]
+#![feature(inherent_associated_types)]
+struct a(Box<[u8; Box::b]>);
+impl a {
+  fn c(self) { self.0.da }
+}
+fn main() {}
diff --git a/tests/crashes/138361.rs b/tests/crashes/138361.rs
new file mode 100644
index 00000000000..8661ed37474
--- /dev/null
+++ b/tests/crashes/138361.rs
@@ -0,0 +1,6 @@
+//@ known-bug: #138361
+
+fn main() {
+  [0; loop{}];
+  std::mem::transmute(4)
+}
diff --git a/tests/crashes/138510.rs b/tests/crashes/138510.rs
new file mode 100644
index 00000000000..f429e8bb33b
--- /dev/null
+++ b/tests/crashes/138510.rs
@@ -0,0 +1,7 @@
+//@ known-bug: #138510
+fn main()
+where
+    #[repr()]
+    _: Sized,
+{
+}
diff --git a/tests/crashes/138534.rs b/tests/crashes/138534.rs
new file mode 100644
index 00000000000..80f9cd22518
--- /dev/null
+++ b/tests/crashes/138534.rs
@@ -0,0 +1,6 @@
+//@ known-bug: #138534
+//@compile-flags: -Zunpretty=expanded
+#[repr(bool)]
+pub enum TopFg {
+    Bar,
+}
diff --git a/tests/crashes/138564.rs b/tests/crashes/138564.rs
new file mode 100644
index 00000000000..b10f75f8cdd
--- /dev/null
+++ b/tests/crashes/138564.rs
@@ -0,0 +1,26 @@
+//@ known-bug: #138564
+//@compile-flags: -Copt-level=0 -Cdebuginfo=2 --crate-type lib
+#![feature(unsize, dispatch_from_dyn, arbitrary_self_types)]
+
+use std::marker::Unsize;
+use std::ops::{Deref, DispatchFromDyn};
+
+#[repr(align(16))]
+pub struct MyPointer<T: ?Sized>(*const T);
+
+impl<T: ?Sized + Unsize<U>, U: ?Sized> DispatchFromDyn<MyPointer<U>> for MyPointer<T> {}
+impl<T: ?Sized> Deref for MyPointer<T> {
+    type Target = T;
+    fn deref(&self) -> &T {
+        unimplemented!()
+    }
+}
+
+pub trait Trait {
+    fn foo(self: MyPointer<Self>) {}
+}
+
+// make sure some usage of `<dyn Trait>::foo` makes it to codegen
+pub fn user() -> *const () {
+    <dyn Trait>::foo as *const ()
+}
diff --git a/tests/crashes/138707.rs b/tests/crashes/138707.rs
new file mode 100644
index 00000000000..4d9a82500ec
--- /dev/null
+++ b/tests/crashes/138707.rs
@@ -0,0 +1,37 @@
+//@ known-bug: #138707
+//@edition:2024
+//@compile-flags: --crate-type lib
+use core::marker::PhantomData;
+
+struct LeftReflector<S> {
+    _phantom: PhantomData<S>,
+}
+
+struct DefaultAllocator {}
+
+trait Allocator<R> {
+    type Buffer;
+}
+
+struct U2 {}
+
+impl Allocator<U2> for DefaultAllocator {
+    type Buffer = [u8; 2];
+}
+
+impl<R> From<R> for LeftReflector<<DefaultAllocator as Allocator<R>>::Buffer>
+where
+    DefaultAllocator: Allocator<R>,
+{
+    fn from(_: R) -> Self {
+        todo!()
+    }
+}
+
+fn ice<D>(a: U2)
+where
+    DefaultAllocator: Allocator<D>,
+{
+    // ICE
+    let _ = LeftReflector::from(a);
+}
diff --git a/tests/crashes/138738.rs b/tests/crashes/138738.rs
new file mode 100644
index 00000000000..74e5effa56f
--- /dev/null
+++ b/tests/crashes/138738.rs
@@ -0,0 +1,7 @@
+//@ known-bug: #138738
+//@ only-x86_64
+
+#![feature(abi_ptx)]
+fn main() {
+    let a = unsafe { core::mem::transmute::<usize, extern "ptx-kernel" fn(i32)>(4) }(2);
+}
diff --git a/tests/crashes/139089.rs b/tests/crashes/139089.rs
new file mode 100644
index 00000000000..3326aa6ad98
--- /dev/null
+++ b/tests/crashes/139089.rs
@@ -0,0 +1,2 @@
+//@ known-bug: #139089
+pub fn foo3(x: &Vec<u8>) { x.push(0); }
diff --git a/tests/crashes/139120.rs b/tests/crashes/139120.rs
new file mode 100644
index 00000000000..f946f010c44
--- /dev/null
+++ b/tests/crashes/139120.rs
@@ -0,0 +1,29 @@
+//@ known-bug: #139120
+
+
+
+pub trait Foo {
+    type Bar<'a>;
+}
+
+pub struct FooImpl {}
+
+impl Foo for FooImpl {
+    type Bar<'a> = ();
+}
+
+pub trait FooFn {
+    fn bar(&self);
+}
+
+impl<T: Foo> FooFn for fn(T, T::Bar<'_>) {
+    fn bar(&self) {}
+}
+
+fn foo<T: Foo>(f: fn(T, T::Bar<'_>)) {
+    let _: &dyn FooFn = &f;
+}
+
+fn main() {
+    foo(|_: FooImpl, _| {});
+}
diff --git a/tests/crashes/139381.rs b/tests/crashes/139381.rs
new file mode 100644
index 00000000000..6757b584e82
--- /dev/null
+++ b/tests/crashes/139381.rs
@@ -0,0 +1,13 @@
+//@ known-bug: #139381
+//@ needs-rustc-debug-assertions
+trait A<'a> {
+    type Assoc: ?Sized;
+}
+
+impl<'a> A<'a> for () {
+    type Assoc = &'a ();
+}
+
+fn hello() -> impl for<'a> A<'a, Assoc: Into<u8> + 'static + Copy> {
+    ()
+}
diff --git a/tests/crashes/139387.rs b/tests/crashes/139387.rs
new file mode 100644
index 00000000000..133643ad084
--- /dev/null
+++ b/tests/crashes/139387.rs
@@ -0,0 +1,15 @@
+//@ known-bug: #139387
+//@ needs-rustc-debug-assertions
+
+trait A {
+    fn method() -> impl Sized;
+}
+trait B {
+    fn method(Hash: Wrap<impl Beta<U: Copy + for<'a> Epsilon<'_, SI1: Eta>>>) -> impl Sized;
+}
+
+fn ambiguous<T: A + B>()
+where
+    T::method(..): Send,
+{
+}
diff --git a/tests/crashes/139409.rs b/tests/crashes/139409.rs
new file mode 100644
index 00000000000..68cbfa153de
--- /dev/null
+++ b/tests/crashes/139409.rs
@@ -0,0 +1,12 @@
+//@ known-bug: #139409
+//@ compile-flags: -Znext-solver=globally
+
+fn main() {
+    trait B<C> {}
+    impl<C> B<C> for () {}
+    trait D<C, E>: B<C> + B<E> {
+        fn f(&self) {}
+    }
+    impl<C, E> D<C, E> for () {}
+    (&() as &dyn D<&(), &()>).f()
+}
diff --git a/tests/crashes/139462.rs b/tests/crashes/139462.rs
new file mode 100644
index 00000000000..05bb246d7be
--- /dev/null
+++ b/tests/crashes/139462.rs
@@ -0,0 +1,8 @@
+//@ known-bug: #139462
+//@ compile-flags: -Cdebuginfo=2
+#![feature(unsafe_binders)]
+use std::unsafe_binder::wrap_binder;
+fn main() {
+    let foo = 0;
+    let foo: unsafe<'a> &'a u32 = unsafe { wrap_binder!(&foo) };
+}
diff --git a/tests/crashes/139556.rs b/tests/crashes/139556.rs
new file mode 100644
index 00000000000..60dc8d7c3af
--- /dev/null
+++ b/tests/crashes/139556.rs
@@ -0,0 +1,13 @@
+//@ known-bug: #139556
+
+trait T {}
+
+type Alias<'a> = impl T;
+
+struct S;
+impl<'a> T for &'a S {}
+
+#[define_opaque(Alias)]
+fn with_positive(fun: impl Fn(Alias<'_>)) {
+    with_positive(|&n| ());
+}
diff --git a/tests/crashes/139570.rs b/tests/crashes/139570.rs
new file mode 100644
index 00000000000..9c001aaf848
--- /dev/null
+++ b/tests/crashes/139570.rs
@@ -0,0 +1,4 @@
+//@ known-bug: #139570
+fn main() {
+    |(1, 42), ()| yield;
+}
diff --git a/tests/crashes/139596.rs b/tests/crashes/139596.rs
new file mode 100644
index 00000000000..590cfddf83e
--- /dev/null
+++ b/tests/crashes/139596.rs
@@ -0,0 +1,10 @@
+//@ known-bug: #139596
+
+#![feature(min_generic_const_args)]
+struct Colour;
+
+struct Led<const C: Colour>;
+
+fn main() {
+    Led::<{ Colour}>;
+}
diff --git a/tests/crashes/139659.rs b/tests/crashes/139659.rs
new file mode 100644
index 00000000000..7fc33f7e6a7
--- /dev/null
+++ b/tests/crashes/139659.rs
@@ -0,0 +1,29 @@
+//@ known-bug: #139659
+//@compile-flags: -Cdebuginfo=2 -Copt-level=0 --crate-type lib
+trait Trait {
+    type Output;
+}
+
+impl<O, F: Fn() -> O> Trait for F {
+    type Output = O;
+}
+
+struct Wrap<P>(P);
+struct WrapOutput<O>(O);
+
+impl<P: Trait> Trait for Wrap<P> {
+    type Output = WrapOutput<P::Output>;
+}
+
+fn wrap<P: Trait>(x: P) -> impl Trait {
+    Wrap(x)
+}
+
+fn consume<P: Trait>(_: P) -> P::Output {
+    unimplemented!()
+}
+
+pub fn recurse() -> impl Sized {
+    consume(wrap(recurse))
+}
+pub fn main() {}
diff --git a/tests/crashes/139738.rs b/tests/crashes/139738.rs
new file mode 100644
index 00000000000..c0e7307de6c
--- /dev/null
+++ b/tests/crashes/139738.rs
@@ -0,0 +1,3 @@
+//@ known-bug: #139738
+#![feature(generic_const_exprs)]
+fn b<'a>() -> impl IntoIterator<[(); (|_: &'a u8| 0, 0).1]> {}
diff --git a/tests/crashes/139815.rs b/tests/crashes/139815.rs
new file mode 100644
index 00000000000..9094acdc94b
--- /dev/null
+++ b/tests/crashes/139815.rs
@@ -0,0 +1,14 @@
+//@ known-bug: #139815
+
+#![feature(generic_const_exprs)]
+fn is_123<const N: usize>(
+    x: [u32; {
+        N + 1;
+        5
+    }],
+) -> bool {
+    match x {
+        [1, 2] => true,
+        _ => false,
+    }
+}
diff --git a/tests/crashes/139817.rs b/tests/crashes/139817.rs
new file mode 100644
index 00000000000..d439ed4cacb
--- /dev/null
+++ b/tests/crashes/139817.rs
@@ -0,0 +1,8 @@
+//@ known-bug: #139817
+fn enum_upvar() {
+    type T = impl Copy;
+    let foo: T = Some((42, std::marker::PhantomData::<T>));
+    let x = move || match foo {
+        None => (),
+    };
+}
diff --git a/tests/crashes/139825.rs b/tests/crashes/139825.rs
new file mode 100644
index 00000000000..8c5b6b80f0b
--- /dev/null
+++ b/tests/crashes/139825.rs
@@ -0,0 +1,5 @@
+//@ known-bug: #139825
+//@compile-flags: --check-cfg=cfg(docsrs,test) --crate-type lib
+struct a
+where
+    for<#[cfg(b)] c> u8:;