From 7f658cabf7abd98d52bd94db8bd7fc788f49856a Mon Sep 17 00:00:00 2001 From: Christian Hughes <9044780+ItsDoot@users.noreply.github.com> Date: Sun, 11 Aug 2024 08:58:10 -0500 Subject: [PATCH] Replace UnsafeCell usage with UnsafeWorldCell in CombinatorSystem (#14706) # Objective Replace usage of `UnsafeCell` with our standard `UnsafeWorldCell` that seemed to have been missed. ## Solution Do just that. --- crates/bevy_ecs/src/system/combinator.rs | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/crates/bevy_ecs/src/system/combinator.rs b/crates/bevy_ecs/src/system/combinator.rs index e1de10b3943f3..cec961ea0abdc 100644 --- a/crates/bevy_ecs/src/system/combinator.rs +++ b/crates/bevy_ecs/src/system/combinator.rs @@ -1,6 +1,4 @@ -use std::{borrow::Cow, cell::UnsafeCell, marker::PhantomData}; - -use bevy_ptr::UnsafeCellDeref; +use std::{borrow::Cow, marker::PhantomData}; use crate::{ archetype::ArchetypeComponentId, @@ -182,18 +180,16 @@ where ) } - fn run<'w>(&mut self, input: Self::In, world: &'w mut World) -> Self::Out { - // SAFETY: Converting `&mut T` -> `&UnsafeCell` - // is explicitly allowed in the docs for `UnsafeCell`. - let world: &'w UnsafeCell = unsafe { std::mem::transmute(world) }; + fn run(&mut self, input: Self::In, world: &mut World) -> Self::Out { + let world = world.as_unsafe_world_cell(); Func::combine( input, // SAFETY: Since these closures are `!Send + !Sync + !'static`, they can never // be called in parallel. Since mutable access to `world` only exists within // the scope of either closure, we can be sure they will never alias one another. - |input| self.a.run(input, unsafe { world.deref_mut() }), + |input| self.a.run(input, unsafe { world.world_mut() }), #[allow(clippy::undocumented_unsafe_blocks)] - |input| self.b.run(input, unsafe { world.deref_mut() }), + |input| self.b.run(input, unsafe { world.world_mut() }), ) }