diff options
Diffstat (limited to 'src/test/ui/traits/issue-85360-eval-obligation-ice.rs')
-rw-r--r-- | src/test/ui/traits/issue-85360-eval-obligation-ice.rs | 143 |
1 files changed, 0 insertions, 143 deletions
diff --git a/src/test/ui/traits/issue-85360-eval-obligation-ice.rs b/src/test/ui/traits/issue-85360-eval-obligation-ice.rs deleted file mode 100644 index 19131684a..000000000 --- a/src/test/ui/traits/issue-85360-eval-obligation-ice.rs +++ /dev/null @@ -1,143 +0,0 @@ -// compile-flags: --edition=2021 - -#![feature(rustc_attrs)] - -use core::any::Any; -use core::marker::PhantomData; - -fn main() { - test::<MaskedStorage<GenericComp<Pos>>>(make()); - //~^ ERROR evaluate(Binder(TraitPredicate(<MaskedStorage<GenericComp<Pos>> as std::marker::Sized>, polarity:Positive), [])) = Ok(EvaluatedToOk) - //~| ERROR evaluate(Binder(TraitPredicate(<MaskedStorage<GenericComp<Pos>> as std::marker::Sized>, polarity:Positive), [])) = Ok(EvaluatedToOk) - - test::<MaskedStorage<GenericComp2<Pos>>>(make()); - //~^ ERROR evaluate(Binder(TraitPredicate(<MaskedStorage<GenericComp2<Pos>> as std::marker::Sized>, polarity:Positive), [])) = Ok(EvaluatedToOkModuloRegions) - //~| ERROR evaluate(Binder(TraitPredicate(<MaskedStorage<GenericComp2<Pos>> as std::marker::Sized>, polarity:Positive), [])) = Ok(EvaluatedToOkModuloRegions) -} - -#[rustc_evaluate_where_clauses] -fn test<T: Sized>(_: T) {} - -fn make<T>() -> T { - todo!() -} - -struct DerefWrap<T>(T); - -impl<T> core::ops::Deref for DerefWrap<T> { - type Target = T; - fn deref(&self) -> &Self::Target { - &self.0 - } -} - -struct Storage<T, D> { - phantom: PhantomData<(T, D)>, -} - -type ReadStorage<T> = Storage<T, DerefWrap<MaskedStorage<T>>>; - -pub trait Component { - type Storage; -} - -struct VecStorage; - -struct Pos; - -impl Component for Pos { - type Storage = VecStorage; -} - -struct GenericComp<T> { - _t: T, -} - -impl<T: 'static> Component for GenericComp<T> { - type Storage = VecStorage; -} - -struct GenericComp2<T> { - _t: T, -} - -impl<T: 'static> Component for GenericComp2<T> where for<'a> &'a bool: 'a { - type Storage = VecStorage; -} - -struct ReadData { - pos_interpdata: ReadStorage<GenericComp<Pos>>, -} - -trait System { - type SystemData; - - fn run(data: Self::SystemData, any: Box<dyn Any>); -} - -struct Sys; - -impl System for Sys { - type SystemData = (ReadData, ReadStorage<Pos>); - - fn run((data, pos): Self::SystemData, any: Box<dyn Any>) { - <ReadStorage<GenericComp<Pos>> as SystemData>::setup(any); - - ParJoin::par_join((&pos, &data.pos_interpdata)); - } -} - -trait ParJoin { - fn par_join(self) - where - Self: Sized, - { - } -} - -impl<'a, T, D> ParJoin for &'a Storage<T, D> -where - T: Component, - D: core::ops::Deref<Target = MaskedStorage<T>>, - T::Storage: Sync, -{ -} - -impl<A, B> ParJoin for (A, B) -where - A: ParJoin, - B: ParJoin, -{ -} - -pub trait SystemData { - fn setup(any: Box<dyn Any>); -} - -impl<T: 'static> SystemData for ReadStorage<T> -where - T: Component, -{ - fn setup(any: Box<dyn Any>) { - let storage: &MaskedStorage<T> = any.downcast_ref().unwrap(); - - <dyn Any as CastFrom<MaskedStorage<T>>>::cast(&storage); - } -} - -pub struct MaskedStorage<T: Component> { - _inner: T::Storage, -} - -pub unsafe trait CastFrom<T> { - fn cast(t: &T) -> &Self; -} - -unsafe impl<T> CastFrom<T> for dyn Any -where - T: Any + 'static, -{ - fn cast(t: &T) -> &Self { - t - } -} |