Skip to content

Commit

Permalink
Auto merge of rust-lang#134342 - matthiaskrgr:tests1512, r=<try>
Browse files Browse the repository at this point in the history
crashes: more tests

try-job: aarch64-apple
try-job: x86_64-msvc
try-job: x86_64-gnu
  • Loading branch information
bors committed Dec 15, 2024
2 parents 0894fb0 + 4136f0c commit 1723663
Show file tree
Hide file tree
Showing 9 changed files with 175 additions and 0 deletions.
23 changes: 23 additions & 0 deletions tests/crashes/130797.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
//@ known-bug: #130797

trait Transform {
type Output<'a>;
}
trait Propagate<O> {}
trait AddChild<C> {
fn add_child(&self) {}
}

pub struct Node<T>(T);
impl<T> AddChild<Box<dyn for<'b> Propagate<T::Output<'b>>>> for Node<T> where T: Transform {}

fn make_graph_root() {
Node(Dummy).add_child()
}

struct Dummy;
impl Transform for Dummy {
type Output<'a> = ();
}

pub fn main() {}
21 changes: 21 additions & 0 deletions tests/crashes/132103.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
//@ known-bug: #132103
//@compile-flags: -Zvalidate-mir --edition=2018 -Zinline-mir=yes
use core::future::{async_drop_in_place, Future};
use core::mem::{self};
use core::pin::pin;
use core::task::{Context, Waker};

async fn test_async_drop<T>(x: T) {
let mut x = mem::MaybeUninit::new(x);
pin!(unsafe { async_drop_in_place(x.as_mut_ptr()) });
}

fn main() {
let waker = Waker::noop();
let mut cx = Context::from_waker(&waker);

let fut = pin!(async {
test_async_drop(test_async_drop(0)).await;
});
fut.poll(&mut cx);
}
36 changes: 36 additions & 0 deletions tests/crashes/132960.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
//@ known-bug: #132960

#![feature(adt_const_params, const_ptr_read, generic_const_exprs)]

const fn concat_strs<const A: &'static str, const B: &'static str>() -> &'static str
where
[(); A.len()]:,
[(); B.len()]:,
[(); A.len() + B.len()]:,
{
#[repr(C)]
#[repr(C)]

const fn concat_arr<const M: usize, const N: usize>(a: [u8; M], b: [u8; N]) -> [u8; M + N] {}

struct Inner<const A: &'static str, const B: &'static str>;
impl<const A: &'static str, const B: &'static str> Inner<A, B>
where
[(); A.len()]:,
[(); B.len()]:,
[(); A.len() + B.len()]:,
{
const ABSTR: &'static str = unsafe {
std::str::from_utf8_unchecked(&concat_arr(
A.as_ptr().cast().read(),
B.as_ptr().cast().read(),
))
};
}

Inner::<A, B>::ABSTR
}

const FOO: &str = "foo";
const BAR: &str = "bar";
const FOOBAR: &str = concat_strs::<FOO, BAR>();
8 changes: 8 additions & 0 deletions tests/crashes/133117.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
//@ known-bug: #133117

fn main() {
match () {
(!|!) if true => {}
(!|!) if true => {}
}
}
43 changes: 43 additions & 0 deletions tests/crashes/133252.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
//@ known-bug: #133252
//@ edition:2021
use std::future::Future;

trait Owned: 'static {}
fn ice() -> impl Future<Output = &'static dyn Owned> {
async {
let not_static = 0;
force_send(async_load(&not_static));
loop {}
}
}

fn force_send<T: Send>(_: T) {}

fn async_load<'a, T: LoadQuery<'a>>(this: T) -> impl Future {
async {
this.get_future().await;
}
}

trait LoadQuery<'a>: Sized {
type LoadFuture: Future;

fn get_future(self) -> Self::LoadFuture {
loop {}
}
}

impl<'a> LoadQuery<'a> for &'a u8 {
type LoadFuture = SimpleFuture;
}

struct SimpleFuture;
impl Future for SimpleFuture {
type Output = ();
fn poll(
self: std::pin::Pin<&mut Self>,
_: &mut std::task::Context<'_>,
) -> std::task::Poll<Self::Output> {
loop {}
}
}
7 changes: 7 additions & 0 deletions tests/crashes/133613.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
//@ known-bug: #133613

struct Wrapper<'a>();

trait IntFactory {
fn stream(&self) -> impl IntFactory<stream(..): IntFactory<stream(..): Send>>;
}
17 changes: 17 additions & 0 deletions tests/crashes/134174.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
//@ known-bug: #134175
//@compile-flags: -Zvalidate-mir -Zinline-mir=yes
use std::vec::IntoIter;

pub(crate) trait Foo: Iterator<Item = <Self as Foo>::Key> {
type Key;
}

impl Foo for IntoIter<i16> {}

fn sum_foo<F: Foo<Key = i32>>(f: F) -> i32 {
f.fold(0, |a, b| a + b)
}

fn main() {
let x = sum_foo(vec![11, 10, 1].into_iter());
}
8 changes: 8 additions & 0 deletions tests/crashes/134334.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
//@ known-bug: #134334

#[repr(simd)]
struct A();

fn main() {
std::arch::asm!("{}", in(xmm_reg) A());
}
12 changes: 12 additions & 0 deletions tests/crashes/134335.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
//@ known-bug: #134335
//@compile-flags: -Zunstable-options --edition=2024 --crate-type=lib
pub async fn async_closure(x: &mut i32) {
let c = async move || {
*x += 1;
};
call_once(c).await;
}

fn call_once<T>(f: impl FnOnce() -> T) -> T {
f()
}

0 comments on commit 1723663

Please sign in to comment.