Rollup merge of #131447 - matthiaskrgr:morecrashtests, r=compiler-errors
add more crash tests r? `@jieyouxu`
This commit is contained in:
commit
55b4ee7233
37
tests/crashes/130956.rs
Normal file
37
tests/crashes/130956.rs
Normal file
@ -0,0 +1,37 @@
|
||||
//@ known-bug: #130956
|
||||
|
||||
mod impl_trait_mod {
|
||||
use super::*;
|
||||
pub type OpaqueBlock = impl Trait;
|
||||
pub type OpaqueIf = impl Trait;
|
||||
|
||||
pub struct BlockWrapper(OpaqueBlock);
|
||||
pub struct IfWrapper(pub OpaqueIf);
|
||||
|
||||
pub fn if_impl() -> Parser<OpaqueIf> {
|
||||
bind(option(block()), |_| block())
|
||||
}
|
||||
}
|
||||
use impl_trait_mod::*;
|
||||
|
||||
pub trait Trait {
|
||||
type Assoc;
|
||||
}
|
||||
pub struct Parser<P>(P);
|
||||
pub struct Bind<P, F>(P, F);
|
||||
impl<P, F> Trait for Bind<P, F> { type Assoc = (); }
|
||||
impl Trait for BlockWrapper { type Assoc = (); }
|
||||
impl Trait for IfWrapper { type Assoc = (); }
|
||||
|
||||
pub fn block() -> Parser<BlockWrapper> {
|
||||
loop {}
|
||||
}
|
||||
pub fn option<P: Trait>(arg: Parser<P>) -> Parser<impl Trait> {
|
||||
bind(arg, |_| block())
|
||||
}
|
||||
fn bind<P: Trait, P2, F: Fn(P::Assoc) -> Parser<P2>>(_: Parser<P>, _: F) -> Parser<Bind<P, F>>
|
||||
{ loop {} }
|
||||
|
||||
fn main() {
|
||||
if_impl().0;
|
||||
}
|
13
tests/crashes/130967.rs
Normal file
13
tests/crashes/130967.rs
Normal file
@ -0,0 +1,13 @@
|
||||
//@ known-bug: #130967
|
||||
|
||||
trait Producer {
|
||||
type Produced;
|
||||
fn make_one() -> Self::Produced;
|
||||
}
|
||||
|
||||
impl<E: ?Sized> Producer for () {
|
||||
type Produced = Option<E>;
|
||||
fn make_one() -> Self::Produced {
|
||||
loop {}
|
||||
}
|
||||
}
|
15
tests/crashes/131046.rs
Normal file
15
tests/crashes/131046.rs
Normal file
@ -0,0 +1,15 @@
|
||||
//@ known-bug: #131046
|
||||
|
||||
trait Owner {
|
||||
const C<const N: u32>: u32;
|
||||
}
|
||||
|
||||
impl Owner for () {
|
||||
const C<const N: u32>: u32 = N;
|
||||
}
|
||||
|
||||
fn take0<const N: u64>(_: impl Owner<C<N> = { N }>) {}
|
||||
|
||||
fn main() {
|
||||
take0::<128>(());
|
||||
}
|
7
tests/crashes/131048.rs
Normal file
7
tests/crashes/131048.rs
Normal file
@ -0,0 +1,7 @@
|
||||
//@ known-bug: #131048
|
||||
|
||||
impl<A> std::ops::CoerceUnsized<A> for A {}
|
||||
|
||||
fn main() {
|
||||
format_args!("Hello, world!");
|
||||
}
|
27
tests/crashes/131050.rs
Normal file
27
tests/crashes/131050.rs
Normal file
@ -0,0 +1,27 @@
|
||||
//@ known-bug: #131050
|
||||
//@ compile-flags: --edition=2021
|
||||
|
||||
fn query_as<D>() {}
|
||||
|
||||
async fn create_user() {
|
||||
query_as();
|
||||
}
|
||||
|
||||
async fn post_user_filter() -> impl Filter {
|
||||
AndThen(&(), || async { create_user().await })
|
||||
}
|
||||
|
||||
async fn get_app() -> impl Send {
|
||||
post_user_filter().await
|
||||
}
|
||||
|
||||
trait Filter {}
|
||||
|
||||
struct AndThen<T, F>(T, F);
|
||||
|
||||
impl<T, F, R> Filter for AndThen<T, F>
|
||||
where
|
||||
F: Fn() -> R,
|
||||
R: Send,
|
||||
{
|
||||
}
|
8
tests/crashes/131052.rs
Normal file
8
tests/crashes/131052.rs
Normal file
@ -0,0 +1,8 @@
|
||||
//@ known-bug: #131052
|
||||
#![feature(adt_const_params)]
|
||||
|
||||
struct ConstBytes<const T: &'static [*mut u8; 3]>;
|
||||
|
||||
pub fn main() {
|
||||
let _: ConstBytes<b"AAA"> = ConstBytes::<b"BBB">;
|
||||
}
|
12
tests/crashes/131101.rs
Normal file
12
tests/crashes/131101.rs
Normal file
@ -0,0 +1,12 @@
|
||||
//@ known-bug: #131101
|
||||
trait Foo<const N: u8> {
|
||||
fn do_x(&self) -> [u8; N];
|
||||
}
|
||||
|
||||
struct Bar;
|
||||
|
||||
impl Foo<const 3> for Bar {
|
||||
fn do_x(&self) -> [u8; 3] {
|
||||
[0u8; 3]
|
||||
}
|
||||
}
|
4
tests/crashes/131102.rs
Normal file
4
tests/crashes/131102.rs
Normal file
@ -0,0 +1,4 @@
|
||||
//@ known-bug: #131102
|
||||
pub struct Blorb<const N: u16>([String; N]);
|
||||
pub struct Wrap(Blorb<0>);
|
||||
pub const fn i(_: Wrap) {}
|
6
tests/crashes/131103.rs
Normal file
6
tests/crashes/131103.rs
Normal file
@ -0,0 +1,6 @@
|
||||
//@ known-bug: #131103
|
||||
struct Struct<const N: i128>(pub [u8; N]);
|
||||
|
||||
pub fn function(value: Struct<3>) -> u8 {
|
||||
value.0[0]
|
||||
}
|
19
tests/crashes/131190.rs
Normal file
19
tests/crashes/131190.rs
Normal file
@ -0,0 +1,19 @@
|
||||
//@ known-bug: #131190
|
||||
//@ compile-flags: -Cinstrument-coverage --edition=2018
|
||||
|
||||
use std::future::Future;
|
||||
|
||||
pub fn block_on<T>(fut: impl Future<Output = T>) -> T {}
|
||||
|
||||
async fn call_once(f: impl async FnOnce(DropMe)) {
|
||||
f(DropMe("world")).await;
|
||||
}
|
||||
|
||||
struct DropMe(&'static str);
|
||||
|
||||
pub fn main() {
|
||||
block_on(async {
|
||||
let async_closure = async move |a: DropMe| {};
|
||||
call_once(async_closure).await;
|
||||
});
|
||||
}
|
16
tests/crashes/131227.rs
Normal file
16
tests/crashes/131227.rs
Normal file
@ -0,0 +1,16 @@
|
||||
//@ known-bug: #131227
|
||||
//@ compile-flags: -Zmir-opt-level=3
|
||||
|
||||
static mut G: () = ();
|
||||
|
||||
fn myfunc() -> i32 {
|
||||
let var = &raw mut G;
|
||||
if var.is_null() {
|
||||
return 0;
|
||||
}
|
||||
0
|
||||
}
|
||||
|
||||
fn main() {
|
||||
myfunc();
|
||||
}
|
7
tests/crashes/131292.rs
Normal file
7
tests/crashes/131292.rs
Normal file
@ -0,0 +1,7 @@
|
||||
//@ known-bug: #131292
|
||||
//@ only-x86_64
|
||||
use std::arch::asm;
|
||||
|
||||
unsafe fn f6() {
|
||||
asm!(concat!(r#"lJÆ<F0908FBF>.<>"#, "{}/day{:02}.txt"));
|
||||
}
|
25
tests/crashes/131294-2.rs
Normal file
25
tests/crashes/131294-2.rs
Normal file
@ -0,0 +1,25 @@
|
||||
//@ known-bug: #131294
|
||||
//@ compile-flags: -Zmir-opt-level=5 -Zvalidate-mir -Zcross-crate-inline-threshold=always
|
||||
|
||||
// https://github.com/rust-lang/rust/issues/131294#issuecomment-2395088049 second comment
|
||||
struct Rows;
|
||||
|
||||
impl Iterator for Rows {
|
||||
type Item = String;
|
||||
|
||||
fn next() -> Option<String> {
|
||||
let args = format_args!("Hello world");
|
||||
|
||||
{
|
||||
match args.as_str() {
|
||||
Some(t) => t.to_owned(),
|
||||
None => String::new(),
|
||||
}
|
||||
}
|
||||
.into()
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
Rows.next();
|
||||
}
|
16
tests/crashes/131294.rs
Normal file
16
tests/crashes/131294.rs
Normal file
@ -0,0 +1,16 @@
|
||||
//@ known-bug: #131294
|
||||
//@ compile-flags: -Zmir-opt-level=5 -Zvalidate-mir -Zcross-crate-inline-threshold=always
|
||||
|
||||
struct Rows;
|
||||
|
||||
impl Iterator for Rows {
|
||||
type Item = String;
|
||||
|
||||
fn next() -> Option<Self::Item> {
|
||||
std::fmt::format(format_args!("Hello world")).into()
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
Rows.next();
|
||||
}
|
9
tests/crashes/131295.rs
Normal file
9
tests/crashes/131295.rs
Normal file
@ -0,0 +1,9 @@
|
||||
//@ known-bug: #131295
|
||||
|
||||
#![feature(generic_const_exprs)]
|
||||
|
||||
async fn foo<'a>() -> [(); {
|
||||
let _y: &'a ();
|
||||
4
|
||||
}] {
|
||||
}
|
12
tests/crashes/131298.rs
Normal file
12
tests/crashes/131298.rs
Normal file
@ -0,0 +1,12 @@
|
||||
//@ known-bug: #131298
|
||||
|
||||
fn dyn_hoops<T>() -> *const dyn Iterator<Item = impl Captures> {
|
||||
loop {}
|
||||
}
|
||||
|
||||
mod typeck {
|
||||
type Opaque = impl Sized;
|
||||
fn define() -> Opaque {
|
||||
let _: Opaque = super::dyn_hoops::<u8>();
|
||||
}
|
||||
}
|
40
tests/crashes/131342-2.rs
Normal file
40
tests/crashes/131342-2.rs
Normal file
@ -0,0 +1,40 @@
|
||||
//@ known-bug: #131342
|
||||
// see also: 131342.rs
|
||||
|
||||
fn main() {
|
||||
problem_thingy(Once);
|
||||
}
|
||||
|
||||
struct Once;
|
||||
|
||||
impl Iterator for Once {
|
||||
type Item = ();
|
||||
}
|
||||
|
||||
fn problem_thingy(items: impl Iterator) {
|
||||
let peeker = items.peekable();
|
||||
problem_thingy(&peeker);
|
||||
}
|
||||
|
||||
trait Iterator {
|
||||
type Item;
|
||||
|
||||
fn peekable(self) -> Peekable<Self>
|
||||
where
|
||||
Self: Sized,
|
||||
{
|
||||
loop {}
|
||||
}
|
||||
}
|
||||
|
||||
struct Peekable<I: Iterator> {
|
||||
_peeked: I::Item,
|
||||
}
|
||||
|
||||
impl<I: Iterator> Iterator for Peekable<I> {
|
||||
type Item = I::Item;
|
||||
}
|
||||
|
||||
impl<I: Iterator + ?Sized> Iterator for &I {
|
||||
type Item = I::Item;
|
||||
}
|
16
tests/crashes/131342.rs
Normal file
16
tests/crashes/131342.rs
Normal file
@ -0,0 +1,16 @@
|
||||
//@ known-bug: #131342
|
||||
// see also: 131342-2.rs
|
||||
|
||||
fn main() {
|
||||
let mut items = vec![1, 2, 3, 4, 5].into_iter();
|
||||
problem_thingy(&mut items);
|
||||
}
|
||||
|
||||
fn problem_thingy(items: &mut impl Iterator<Item = u8>) {
|
||||
let mut peeker = items.peekable();
|
||||
match peeker.peek() {
|
||||
Some(_) => (),
|
||||
None => return (),
|
||||
}
|
||||
problem_thingy(&mut peeker);
|
||||
}
|
9
tests/crashes/131347.rs
Normal file
9
tests/crashes/131347.rs
Normal file
@ -0,0 +1,9 @@
|
||||
//@ known-bug: #131347
|
||||
//@ compile-flags: -Zmir-opt-level=5 -Zvalidate-mir
|
||||
|
||||
struct S;
|
||||
static STUFF: [i8] = [0; S::N];
|
||||
|
||||
fn main() {
|
||||
assert_eq!(STUFF, [0; 63]);
|
||||
}
|
33
tests/crashes/131373.rs
Normal file
33
tests/crashes/131373.rs
Normal file
@ -0,0 +1,33 @@
|
||||
//@ known-bug: #131373
|
||||
|
||||
trait LockReference: 'static {
|
||||
type Ref<'a>;
|
||||
}
|
||||
|
||||
struct SliceRef<'a, T: ?Sized> {
|
||||
_x: &'a T,
|
||||
}
|
||||
|
||||
impl<'a, T: ?Sized, SR: LockReference> IntoIterator for SliceRef<'a, T>
|
||||
where
|
||||
&'a T: IntoIterator<Item = &'a SR>,
|
||||
{
|
||||
type Item = SR::Ref<'a>;
|
||||
type IntoIter = std::iter::Map<<&'a T as IntoIterator>::IntoIter,
|
||||
for<'c> fn(&'c SR) -> SR::Ref<'c>>;
|
||||
fn into_iter(self) -> Self::IntoIter {
|
||||
loop {}
|
||||
}
|
||||
}
|
||||
|
||||
impl LockReference for () {
|
||||
type Ref<'a> = ();
|
||||
}
|
||||
|
||||
fn locked() -> SliceRef<'static, [()]> {
|
||||
loop {}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let _ = locked().into_iter();
|
||||
}
|
12
tests/crashes/131406.rs
Normal file
12
tests/crashes/131406.rs
Normal file
@ -0,0 +1,12 @@
|
||||
//@ known-bug: #131406
|
||||
|
||||
trait Owner {
|
||||
const C<const N: u32>: u32 = N;
|
||||
}
|
||||
|
||||
impl Owner for () {}
|
||||
fn take0<const N: u64>(_: impl Owner<C<N> = { N }>) {}
|
||||
|
||||
fn main() {
|
||||
take0::<128>(());
|
||||
}
|
Loading…
Reference in New Issue
Block a user