crashes: add a couple more tests

This commit is contained in:
Matthias Krüger 2024-04-15 23:01:02 +02:00
parent 468f115684
commit 1d45b7adaf
16 changed files with 297 additions and 0 deletions

12
tests/crashes/100618.rs Normal file
View File

@ -0,0 +1,12 @@
//@ known-bug: #100618
//@ compile-flags: -Cdebuginfo=2
//@ only-x86_64
enum Foo<T: 'static> {
Value(T),
Recursive(&'static Foo<Option<T>>),
}
fn main() {
let _x = Foo::Value(());
}

19
tests/crashes/105299.rs Normal file
View File

@ -0,0 +1,19 @@
//@ known-bug: #105299
pub trait Foo: Clone {}
pub struct Bar<'a, T: Clone> {
pub cow: std::borrow::Cow<'a, [T]>,
pub THIS_CAUSES_ICE: (), // #1
}
impl<T> Bar<'_, T>
where
T: Clone,
[T]: Foo,
{
pub fn MOVES_SELF(self) {} // #2
}
pub fn main() {}

43
tests/crashes/107362.rs Normal file
View File

@ -0,0 +1,43 @@
//@ known-bug: #107362
//@ compile-flags: -Cdebuginfo=2
pub trait Functor
{
type With<T>: Functor;
}
pub struct IdFunctor<T>(T);
impl<T> Functor for IdFunctor<T> {
type With<T2> = IdFunctor<T2>;
}
impl<T> Functor for Vec<T> {
type With<T2> = Vec<T2> ;
}
pub struct Compose<F1, F2, T>(F1::With<F2::With<T>>)
where
F1: Functor + ?Sized,
F2: Functor + ?Sized;
impl<F1, F2, T> Functor for Compose<F1, F2, T>
where
F1: Functor + ?Sized,
F2: Functor + ?Sized
{
type With<T2> = F1::With<F2::With<T2>> ;
}
pub enum Value<F>
where
F: Functor + ?Sized,
{
SignedInt(*mut F::With<i64>),
Array(*mut Value<Compose<F, Vec<()>, ()>>),
}
fn main() {
let x: Value<IdFunctor<()>> = Value::SignedInt(&mut IdFunctor(1));
}

44
tests/crashes/108499.rs Normal file
View File

@ -0,0 +1,44 @@
//@ known-bug: #108499
// at lower recursion limits the recursion limit is reached before the bug happens
#![recursion_limit = "2000"]
// this will try to calculate 3↑↑3=3^(3^3)
type Test = <() as Op<((), ()), [[[(); 0]; 0]; 0], [[[(); 0]; 0]; 0],
[[[[(); 0]; 0]; 0]; 0]>>::Result;
use std::default::Default;
fn main() {
// force the compiler to actually evaluate `Test`
println!("{}", Test::default());
}
trait Op<X, A, B, C> {
type Result;
}
// this recursive function defines the hyperoperation sequence,
// a canonical example of the type of recursion which produces the issue
// the problem seems to be caused by having two recursive calls, the second
// of which depending on the first
impl<
X: Op<(X, Y), A, [B; 0], [C; 0]>,
Y: Op<(X, Y), A, X::Result, C>,
A, B, C,
> Op<(X, Y), A, [[B; 0]; 0], [C; 0]> for () {
type Result = Y::Result;
}
// base cases
impl<X, A, B> Op<X, A, B, ()> for () {
type Result = [B; 0];
}
impl<X, A> Op<X, A, [(); 0], [(); 0]> for () {
type Result = [A; 0];
}
impl<X, A, C> Op<X, A, [(); 0], [[C; 0]; 0]> for () {
type Result = A;
}

2
tests/crashes/114920.rs Normal file
View File

@ -0,0 +1,2 @@
//@ known-bug: #114920
#![core::prelude::v1::test]

26
tests/crashes/118185-2.rs Normal file
View File

@ -0,0 +1,26 @@
//@ known-bug: #118185
fn main() {
let target: Target = create_target();
target.get(0); // correct arguments work
target.get(10.0); // CRASH HERE
}
// must be generic
fn create_target<T>() -> T {
unimplemented!()
}
// unimplemented trait, but contains function with the same name
pub trait RandomTrait {
fn get(&mut self); // but less arguments
}
struct Target;
impl Target {
// correct function with arguments
pub fn get(&self, data: i32) {
unimplemented!()
}
}

8
tests/crashes/118545.rs Normal file
View File

@ -0,0 +1,8 @@
//@ known-bug: #118545
#![feature(generic_const_exprs)]
struct Checked<const F: fn()>;
fn foo() {}
const _: Checked<foo> = Checked::<foo>;
pub fn main() {}

11
tests/crashes/118590.rs Normal file
View File

@ -0,0 +1,11 @@
//@ known-bug: #118590
fn main() {
recurse(std::iter::empty::<()>())
}
fn recurse(nums: impl Iterator) {
if true { return }
recurse(nums.skip(42).peekable())
}

6
tests/crashes/119381.rs Normal file
View File

@ -0,0 +1,6 @@
//@ known-bug: #119381
#![feature(with_negative_coherence)]
trait Trait {}
impl<const N: u8> Trait for [(); N] {}
impl<const N: i8> Trait for [(); N] {}

14
tests/crashes/120033.rs Normal file
View File

@ -0,0 +1,14 @@
//@ known-bug: #120033
#![feature(non_lifetime_binders)]
pub trait Foo<T: ?Sized> {
type Bar<K: ?Sized>;
}
pub struct Bar<T: ?AutoTrait> {}
pub fn f<T1, T2>()
where
T1: for<T> Foo<usize, Bar = Bar<T>>,
T2: for<L, T> Foo<usize, Bar<T> = T1::Bar<T>>,
{}

24
tests/crashes/120254.rs Normal file
View File

@ -0,0 +1,24 @@
//@ known-bug: #120254
trait Dbg {}
struct Foo<I, E> {
input: I,
errors: E,
}
trait Bar: Offset<<Self as Bar>::Checkpoint> {
type Checkpoint;
}
impl<I: Bar, E: Dbg> Bar for Foo<I, E> {
type Checkpoint = I::Checkpoint;
}
trait Offset<Start = Self> {}
impl<I: Bar, E: Dbg> Offset<<Foo<I, E> as Bar>::Checkpoint> for Foo<I, E> {}
impl<I: Bar, E> Foo<I, E> {
fn record_err(self, _: <Self as Bar>::Checkpoint) -> () {}
}

9
tests/crashes/121363.rs Normal file
View File

@ -0,0 +1,9 @@
//@ known-bug: #121363
//@ compile-flags: -Zmir-opt-level=5 --crate-type lib
#![feature(trivial_bounds)]
#[derive(Debug)]
struct TwoStrs(str, str)
where
str: Sized;

30
tests/crashes/121538.rs Normal file
View File

@ -0,0 +1,30 @@
//@ known-bug: #121538
//@ compile-flags: -Cdebuginfo=2
use std::marker::PhantomData;
struct Digit<T> {
elem: T
}
struct Node<T:'static> { m: PhantomData<&'static T> }
enum FingerTree<T:'static> {
Single(T),
Deep(
Digit<T>,
Node<FingerTree<Node<T>>>,
)
}
enum Wrapper<T:'static> {
Simple,
Other(FingerTree<T>),
}
fn main() {
let w =
Some(Wrapper::Simple::<u32>);
}

12
tests/crashes/122259.rs Normal file
View File

@ -0,0 +1,12 @@
//@ known-bug: #122259
#![feature(unsized_fn_params)]
#[derive(Copy, Clone)]
struct Target(str);
fn w(t: &Target) {
x(*t);
}
fn x(t: Target) {}

22
tests/crashes/122630.rs Normal file
View File

@ -0,0 +1,22 @@
//@ known-bug: #122630
//@ compile-flags: -Zvalidate-mir
use std::ops::Coroutine;
const FOO_SIZE: usize = 1024;
struct Foo([u8; FOO_SIZE]);
impl Drop for Foo {
fn move_before_yield_with_noop() -> impl Coroutine<Yield = ()> {}
}
fn overlap_move_points() -> impl Coroutine<Yield = ()> {
static || {
let first = Foo([0; FOO_SIZE]);
yield;
let second = first;
yield;
let second = first;
yield;
}
}

15
tests/crashes/97006.rs Normal file
View File

@ -0,0 +1,15 @@
//@ known-bug: #97006
//@ compile-flags: -Zunpretty=hir
#![allow(unused)]
macro_rules! m {
($attr_path: path) => {
#[$attr_path]
fn f() {}
}
}
m!(inline<u8>); //~ ERROR: unexpected generic arguments in path
fn main() {}