Skip to content
This repository has been archived by the owner on May 23, 2024. It is now read-only.

Commit

Permalink
Add some ICEs
Browse files Browse the repository at this point in the history
  • Loading branch information
ritikmishra committed Mar 12, 2023
1 parent fade49f commit bcba3fe
Show file tree
Hide file tree
Showing 8 changed files with 137 additions and 0 deletions.
15 changes: 15 additions & 0 deletions ices/106238.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#![feature(trait_alias)]
use core::ops::Add;

pub trait DoSome<T> {}

// Trait alias causes compiler panic
pub trait Cell<T: Add<T, Output=T>> = DoSome<T>;

struct _Container<T> {
pub cells: dyn Cell<T>,
}


fn main() {}

24 changes: 24 additions & 0 deletions ices/107409.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
use std::marker::PhantomData as Boo;

struct Gc<'gc, T: 'gc>(Boo<fn(&'gc T) -> &'gc T>);

trait Rootable<'env> {
type AsRoot<'r>: Rootable<'r> + 'r where 'env: 'r;
}

impl<'env, T: Rootable<'env>> Rootable<'env> for Gc<'env, T> {
type AsRoot<'r> = Gc<'r, T::AsRoot<'r>> where 'env: 'r;
}

impl<'env> Rootable<'env> for i32 {
type AsRoot<'r> = i32 where 'env: 'r;
}

fn reroot<'gc, T: Rootable<'gc>>(_t: T, _f: for<'a> fn(T::AsRoot<'a>)) {
}

fn test<'gc>(t: Gc<'gc, i32>) {
reroot(t, |_| ());
}

fn main() {}
21 changes: 21 additions & 0 deletions ices/108399.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#![feature(type_alias_impl_trait)]

use std::future::Future;

type FutNothing<'a> = impl 'a + Future<Output = ()>;

async fn operation(x: &mut ()) -> () {
()
}

async fn indirect() {
call(operation).await
}

async fn call<F>(mut f: F)
where
for<'any> F: FnMut(&'any mut ()) -> FutNothing<'any>,
{
f(&mut ()).await
}

15 changes: 15 additions & 0 deletions ices/108498.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#![feature(type_alias_impl_trait)]
type Opaque = impl Sized;

fn get_rpit() -> impl Clone {}

fn query(_: impl FnOnce() -> Opaque) {}

fn test() -> Opaque {
query(get_rpit);
get_rpit()
}

fn main() {
test();
}
7 changes: 7 additions & 0 deletions ices/108683.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
fn example(var: i32) {
|| {
let 0 = var;
};
}

fn main() {}
8 changes: 8 additions & 0 deletions ices/108814.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#![feature(non_lifetime_binders)]

fn take(_: impl for<T> FnOnce(T) -> T) {}

fn main() {
take(|x| x)
}

9 changes: 9 additions & 0 deletions ices/108832.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
fn ice()
where
for<'w> fn(&'w ()): FnMut(&'w ()),
{
}

fn main() {
ice();
}
38 changes: 38 additions & 0 deletions ices/109020.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#![feature(type_alias_impl_trait)]

use core::marker::PhantomData;

type WithEmplacableForFn<'a> = impl EmplacableFn + 'a;

fn with_emplacable_for<'a, F, R>(mut f: F) -> R
where
F: for<'b> FnMut(Emplacable<WithEmplacableForFn<'b>>) -> R,
{
fn with_emplacable_for_inner<'a, R>(
_: &'a (),
_: &mut dyn FnMut(Emplacable<WithEmplacableForFn<'a>>) -> R,
) -> R {
fn _constrain(_: &mut ()) -> WithEmplacableForFn<'_> {
()
}
loop {}
}

with_emplacable_for_inner(&(), &mut f)
}

trait EmplacableFn {}

impl EmplacableFn for () {}

struct Emplacable<F>
where
F: EmplacableFn,
{
phantom: PhantomData<F>,
}

fn main() {
with_emplacable_for(|_| {});
}

0 comments on commit bcba3fe

Please sign in to comment.