diff options
author | Alan Wu <XrXr@users.noreply.github.com> | 2023-04-04 16:25:37 -0400 |
---|---|---|
committer | Alan Wu <XrXr@users.noreply.github.com> | 2023-04-05 09:49:31 -0400 |
commit | 8f734cf93ec1b937fec3eada2df205f9e93b3f33 (patch) | |
tree | d73a78af3d293878825191445a7083a421186162 /yjit/src | |
parent | 929d55c3c7d312a21e5691f9c6793450e2c617d1 (diff) | |
download | ruby-8f734cf93ec1b937fec3eada2df205f9e93b3f33.tar.gz |
YJIT: Eanble `unsafe_op_in_unsafe_fn` on crate::core
Encourages commenting about soundness of `unsafe` usages.
Diffstat (limited to 'yjit/src')
-rw-r--r-- | yjit/src/core.rs | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/yjit/src/core.rs b/yjit/src/core.rs index 7952a0a229..d257860fbf 100644 --- a/yjit/src/core.rs +++ b/yjit/src/core.rs @@ -1,4 +1,8 @@ //! Code versioning, retained live control flow graph mutations, type tracking, etc. + +// So we can comment on individual uses of `unsafe` in `unsafe` functions +#![warn(unsafe_op_in_unsafe_fn)] + use crate::asm::*; use crate::backend::ir::*; use crate::codegen::*; @@ -1007,7 +1011,8 @@ pub fn get_or_create_iseq_payload(iseq: IseqPtr) -> &'static mut IseqPayload { /// Iterate over all existing ISEQs pub fn for_each_iseq<F: FnMut(IseqPtr)>(mut callback: F) { unsafe extern "C" fn callback_wrapper(iseq: IseqPtr, data: *mut c_void) { - let callback: &mut &mut dyn FnMut(IseqPtr) -> bool = std::mem::transmute(&mut *data); + // SAFETY: points to the local below + let callback: &mut &mut dyn FnMut(IseqPtr) -> bool = unsafe { std::mem::transmute(&mut *data) }; callback(iseq); } let mut data: &mut dyn FnMut(IseqPtr) = &mut callback; @@ -1026,7 +1031,8 @@ pub fn for_each_iseq_payload<F: FnMut(&IseqPayload)>(mut callback: F) { /// Iterate over all on-stack ISEQs pub fn for_each_on_stack_iseq<F: FnMut(IseqPtr)>(mut callback: F) { unsafe extern "C" fn callback_wrapper(iseq: IseqPtr, data: *mut c_void) { - let callback: &mut &mut dyn FnMut(IseqPtr) -> bool = std::mem::transmute(&mut *data); + // SAFETY: points to the local below + let callback: &mut &mut dyn FnMut(IseqPtr) -> bool = unsafe { std::mem::transmute(&mut *data) }; callback(iseq); } let mut data: &mut dyn FnMut(IseqPtr) = &mut callback; |