add more known-crashes tests

This commit is contained in:
Matthias Krüger 2024-04-19 22:23:17 +02:00
parent e0586a6e1a
commit b015f61488
9 changed files with 122 additions and 0 deletions

16
tests/crashes/103708.rs Normal file
View file

@ -0,0 +1,16 @@
//@ known-bug: #103708
#![feature(min_specialization)]
trait MySpecTrait {
fn f();
}
impl<'a, T: ?Sized> MySpecTrait for T {
default fn f() {}
}
impl<'a, T: ?Sized> MySpecTrait for &'a T {
fn f() {}
}
fn main() {}

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

@ -0,0 +1,15 @@
//@ known-bug: #104685
//@ compile-flags: -Zextra-const-ub-checks
#![feature(extern_types)]
extern {
pub type ExternType;
}
extern "C" {
pub static EXTERN: ExternType;
}
pub static EMPTY: () = unsafe { &EXTERN; };
fn main() {}

16
tests/crashes/105249.rs Normal file
View file

@ -0,0 +1,16 @@
//@ known-bug: #105249
//@ compile-flags: -Zpolymorphize=on
trait Foo<T> {
fn print<'a>(&'a self) where T: 'a { println!("foo"); }
}
impl<'a> Foo<&'a ()> for () { }
trait Bar: for<'a> Foo<&'a ()> { }
impl Bar for () {}
fn main() {
(&() as &dyn Bar).print(); // Segfault
}

17
tests/crashes/115994.rs Normal file
View file

@ -0,0 +1,17 @@
//@ known-bug: #115994
//@ compile-flags: -Cdebuginfo=2 --crate-type lib
// To prevent "overflow while adding drop-check rules".
use std::mem::ManuallyDrop;
pub enum Foo<U> {
Leaf(U),
Branch(BoxedFoo<BoxedFoo<U>>),
}
pub type BoxedFoo<U> = ManuallyDrop<Box<Foo<U>>>;
pub fn test() -> Foo<usize> {
todo!()
}

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

@ -0,0 +1,9 @@
//@ known-bug: #116721
//@ compile-flags: -Zmir-opt-level=3 --emit=mir
fn hey<T>(it: &[T])
where
[T]: Clone,
{
}
fn main() {}

22
tests/crashes/118244.rs Normal file
View file

@ -0,0 +1,22 @@
//@ known-bug: #118244
//@ compile-flags: -Cdebuginfo=2
#![allow(incomplete_features)]
#![feature(generic_const_exprs)]
struct Inner<const N: usize, const M: usize>;
impl<const N: usize, const M: usize> Inner<N, M> where [(); N + M]: {
fn i() -> Self {
Self
}
}
struct Outer<const A: usize, const B: usize>(Inner<A, { B * 2 }>) where [(); A + (B * 2)]:;
impl<const A: usize, const B: usize> Outer<A, B> where [(); A + (B * 2)]: {
fn o() -> Self {
Self(Inner::i())
}
}
fn main() {
Outer::<1, 1>::o();
}

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

@ -0,0 +1,9 @@
//@ known-bug: #124083
struct Outest(&'a ());
fn make() -> Outest {}
fn main() {
if let Outest("foo") = make() {}
}

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

@ -0,0 +1,14 @@
//@ known-bug: #124151
#![feature(generic_const_exprs)]
use std::ops::Add;
pub struct Dimension;
pub struct Quantity<S, const D: Dimension>(S);
impl<const D: Dimension, LHS, RHS> Add<LHS, D> for Quantity<LHS, { Dimension }> {}
pub fn add<const U: Dimension>(x: Quantity<f32, U>) -> Quantity<f32, U> {
x + y
}

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

@ -0,0 +1,4 @@
//@ known-bug: #124164
static S_COUNT: = std::sync::atomic::AtomicUsize::new(0);
fn main() {}