From: Mark Thom Date: Thu, 13 Mar 2025 19:33:37 +0000 (-0700) Subject: some fixes in response to miri X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=3488e0d75a1580074af3e5acebe2e6c690448a2f;p=scryer-prolog.git some fixes in response to miri --- diff --git a/src/ffi.rs b/src/ffi.rs index a3e93380..2895009b 100644 --- a/src/ffi.rs +++ b/src/ffi.rs @@ -89,27 +89,25 @@ impl ForeignFunctionTable { } fn map_type_ffi(&mut self, source: &Atom) -> *mut ffi_type { - unsafe { - match source { - atom!("sint64") => addr_of_mut!(types::sint64), - atom!("sint32") => addr_of_mut!(types::sint32), - atom!("sint16") => addr_of_mut!(types::sint16), - atom!("sint8") => addr_of_mut!(types::sint8), - atom!("uint64") => addr_of_mut!(types::uint64), - atom!("uint32") => addr_of_mut!(types::uint32), - atom!("uint16") => addr_of_mut!(types::uint16), - atom!("uint8") => addr_of_mut!(types::uint8), - atom!("bool") => addr_of_mut!(types::sint8), - atom!("void") => addr_of_mut!(types::void), - atom!("cstr") => addr_of_mut!(types::pointer), - atom!("ptr") => addr_of_mut!(types::pointer), - atom!("f32") => addr_of_mut!(types::float), - atom!("f64") => addr_of_mut!(types::double), - struct_name => match self.structs.get_mut(&*struct_name.as_str()) { - Some(ref mut struct_type) => &mut struct_type.ffi_type, - None => unreachable!(), - }, - } + match source { + atom!("sint64") => addr_of_mut!(types::sint64), + atom!("sint32") => addr_of_mut!(types::sint32), + atom!("sint16") => addr_of_mut!(types::sint16), + atom!("sint8") => addr_of_mut!(types::sint8), + atom!("uint64") => addr_of_mut!(types::uint64), + atom!("uint32") => addr_of_mut!(types::uint32), + atom!("uint16") => addr_of_mut!(types::uint16), + atom!("uint8") => addr_of_mut!(types::uint8), + atom!("bool") => addr_of_mut!(types::sint8), + atom!("void") => addr_of_mut!(types::void), + atom!("cstr") => addr_of_mut!(types::pointer), + atom!("ptr") => addr_of_mut!(types::pointer), + atom!("f32") => addr_of_mut!(types::float), + atom!("f64") => addr_of_mut!(types::double), + struct_name => match self.structs.get_mut(&*struct_name.as_str()) { + Some(ref mut struct_type) => &mut struct_type.ffi_type, + None => unreachable!(), + }, } } diff --git a/src/lib/builtins.pl b/src/lib/builtins.pl index 4e8cb44e..2b974228 100644 --- a/src/lib/builtins.pl +++ b/src/lib/builtins.pl @@ -568,7 +568,6 @@ parse_options_list(Options, Selector, DefaultPairs, OptionValues, Stub) :- % maplist isn't % declared as a % meta-predicate yet - '$debug_hook', catch(lists:maplist(Selector, Options, OptionPairs0), error(E, _), builtins:throw(error(E, Stub))) -> diff --git a/src/machine/heap.rs b/src/machine/heap.rs index b753809d..d628391c 100644 --- a/src/machine/heap.rs +++ b/src/machine/heap.rs @@ -1281,3 +1281,17 @@ pub(crate) fn to_local_code_ptr(heap: &Heap, addr: HeapCellValue) -> Option *mut u8 { - let addr: u64 = self.ptr(); - addr as usize as *mut _ + unsafe { + mem::transmute::<_, *mut u8>(self.ptr()) + } } #[inline(always)] @@ -675,22 +676,23 @@ impl UntypedArenaPtr { } #[inline] - pub fn get_ptr(self) -> *const u8 { - let addr: u64 = self.ptr(); - addr as usize as *const u8 + pub fn get_ptr(self) -> *const ArenaHeader { + unsafe { + mem::transmute::<_, *const ArenaHeader>(self.ptr()) + } } #[inline] pub fn get_tag(self) -> ArenaHeaderTag { unsafe { - let header = *(self.get_ptr() as *const ArenaHeader); + let header = *self.get_ptr(); header.get_tag() } } #[inline] pub fn payload_offset(self) -> *const u8 { - unsafe { self.get_ptr().add(mem::size_of::()) } + unsafe { self.get_ptr().byte_add(mem::size_of::()) as *const _ } } /// # Safety