crashes: more tests

This commit is contained in:
Matthias Krüger 2025-04-15 22:46:29 +02:00
parent 25cdf1f674
commit c1f2ad2d16
25 changed files with 332 additions and 0 deletions

42
tests/crashes/138156.rs Normal file
View file

@ -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() {}

9
tests/crashes/138240.rs Normal file
View file

@ -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() {}

12
tests/crashes/138265.rs Normal file
View file

@ -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
}]
}

7
tests/crashes/138266.rs Normal file
View file

@ -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;
}

8
tests/crashes/138359.rs Normal file
View file

@ -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() {}

6
tests/crashes/138361.rs Normal file
View file

@ -0,0 +1,6 @@
//@ known-bug: #138361
fn main() {
[0; loop{}];
std::mem::transmute(4)
}

7
tests/crashes/138510.rs Normal file
View file

@ -0,0 +1,7 @@
//@ known-bug: #138510
fn main()
where
#[repr()]
_: Sized,
{
}

6
tests/crashes/138534.rs Normal file
View file

@ -0,0 +1,6 @@
//@ known-bug: #138534
//@compile-flags: -Zunpretty=expanded
#[repr(bool)]
pub enum TopFg {
Bar,
}

26
tests/crashes/138564.rs Normal file
View file

@ -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 ()
}

37
tests/crashes/138707.rs Normal file
View file

@ -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);
}

7
tests/crashes/138738.rs Normal file
View file

@ -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);
}

2
tests/crashes/139089.rs Normal file
View file

@ -0,0 +1,2 @@
//@ known-bug: #139089
pub fn foo3(x: Vec<u8>) { x.push(0); }

29
tests/crashes/139120.rs Normal file
View file

@ -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, _| {});
}

13
tests/crashes/139381.rs Normal file
View file

@ -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> {
()
}

15
tests/crashes/139387.rs Normal file
View file

@ -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,
{
}

12
tests/crashes/139409.rs Normal file
View file

@ -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()
}

8
tests/crashes/139462.rs Normal file
View file

@ -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) };
}

13
tests/crashes/139556.rs Normal file
View file

@ -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| ());
}

4
tests/crashes/139570.rs Normal file
View file

@ -0,0 +1,4 @@
//@ known-bug: #139570
fn main() {
|(1, 42), ()| yield;
}

10
tests/crashes/139596.rs Normal file
View file

@ -0,0 +1,10 @@
//@ known-bug: #139596
#![feature(min_generic_const_args)]
struct Colour;
struct Led<const C: Colour>;
fn main() {
Led::<{ Colour}>;
}

29
tests/crashes/139659.rs Normal file
View file

@ -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() {}

3
tests/crashes/139738.rs Normal file
View file

@ -0,0 +1,3 @@
//@ known-bug: #139738
#![feature(generic_const_exprs)]
fn b<'a>() -> impl IntoIterator<[(); (|_: &'a u8| 0, 0).1]> {}

14
tests/crashes/139815.rs Normal file
View file

@ -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,
}
}

8
tests/crashes/139817.rs Normal file
View file

@ -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 => (),
};
}

5
tests/crashes/139825.rs Normal file
View file

@ -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:;