summaryrefslogtreecommitdiff
path: root/yjit
diff options
context:
space:
mode:
authorAlan Wu <XrXr@users.noreply.github.com>2023-04-04 16:25:37 -0400
committerAlan Wu <XrXr@users.noreply.github.com>2023-04-05 09:49:31 -0400
commit8f734cf93ec1b937fec3eada2df205f9e93b3f33 (patch)
treed73a78af3d293878825191445a7083a421186162 /yjit
parent929d55c3c7d312a21e5691f9c6793450e2c617d1 (diff)
downloadruby-8f734cf93ec1b937fec3eada2df205f9e93b3f33.tar.gz
YJIT: Eanble `unsafe_op_in_unsafe_fn` on crate::core
Encourages commenting about soundness of `unsafe` usages.
Diffstat (limited to 'yjit')
-rw-r--r--yjit/src/core.rs10
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;