@@ -4,7 +4,6 @@ use crate::edges::JuliaVMEdge;
44use crate :: edges:: OffsetEdge ;
55use crate :: julia_types:: * ;
66use crate :: object_model:: mmtk_jl_array_ndims;
7- use crate :: JuliaVM ;
87use crate :: JULIA_BUFF_TAG ;
98use crate :: UPCALLS ;
109use memoffset:: offset_of;
@@ -416,27 +415,34 @@ fn get_stack_addr(addr: Address, offset: isize, lb: u64, ub: u64) -> Address {
416415 }
417416}
418417
419- use mmtk:: vm:: edge_shape:: Edge ;
420-
421418#[ inline( always) ]
422419pub fn process_edge < EV : EdgeVisitor < JuliaVMEdge > > ( closure : & mut EV , slot : Address ) {
423420 let simple_edge = SimpleEdge :: from_address ( slot) ;
424- debug_assert ! (
425- simple_edge. load( ) . is_null( )
426- || mmtk:: memory_manager:: is_in_mmtk_spaces:: <JuliaVM >( simple_edge. load( ) ) ,
427- "Object {:?} in slot {:?} is not mapped address" ,
428- simple_edge. load( ) ,
429- simple_edge
430- ) ;
431421
432- // captures wrong edges before creating the work
433- debug_assert ! (
434- simple_edge. load( ) . to_raw_address( ) . as_usize( ) % 16 == 0
435- || simple_edge. load( ) . to_raw_address( ) . as_usize( ) % 8 == 0 ,
436- "Object {:?} in slot {:?} is not aligned to 8 or 16" ,
437- simple_edge. load( ) ,
438- simple_edge
439- ) ;
422+ #[ cfg( debug_assertions) ]
423+ {
424+ use crate :: JuliaVM ;
425+ use mmtk:: vm:: edge_shape:: Edge ;
426+
427+ if let Some ( objref) = simple_edge. load ( ) {
428+ debug_assert ! (
429+ mmtk:: memory_manager:: is_in_mmtk_spaces:: <JuliaVM >( objref) ,
430+ "Object {:?} in slot {:?} is not mapped address" ,
431+ objref,
432+ simple_edge
433+ ) ;
434+
435+ let raw_addr_usize = objref. to_raw_address ( ) . as_usize ( ) ;
436+
437+ // captures wrong edges before creating the work
438+ debug_assert ! (
439+ raw_addr_usize % 16 == 0 || raw_addr_usize % 8 == 0 ,
440+ "Object {:?} in slot {:?} is not aligned to 8 or 16" ,
441+ objref,
442+ simple_edge
443+ ) ;
444+ }
445+ }
440446
441447 closure. visit_edge ( JuliaVMEdge :: Simple ( simple_edge) ) ;
442448}
@@ -485,13 +491,20 @@ pub fn process_offset_edge<EV: EdgeVisitor<JuliaVMEdge>>(
485491 offset : usize ,
486492) {
487493 let offset_edge = OffsetEdge :: new_with_offset ( slot, offset) ;
488- debug_assert ! (
489- offset_edge. load( ) . is_null( )
490- || mmtk:: memory_manager:: is_in_mmtk_spaces:: <JuliaVM >( offset_edge. load( ) ) ,
491- "Object {:?} in slot {:?} is not mapped address" ,
492- offset_edge. load( ) ,
493- offset_edge
494- ) ;
494+ #[ cfg( debug_assertions) ]
495+ {
496+ use crate :: JuliaVM ;
497+ use mmtk:: vm:: edge_shape:: Edge ;
498+
499+ if let Some ( objref) = offset_edge. load ( ) {
500+ debug_assert ! (
501+ mmtk:: memory_manager:: is_in_mmtk_spaces:: <JuliaVM >( objref) ,
502+ "Object {:?} in slot {:?} is not mapped address" ,
503+ objref,
504+ offset_edge
505+ ) ;
506+ }
507+ }
495508
496509 closure. visit_edge ( JuliaVMEdge :: Offset ( offset_edge) ) ;
497510}
@@ -603,5 +616,6 @@ pub fn mmtk_jl_bt_num_uintvals(bt_entry: *mut mmtk_jl_bt_element_t) -> usize {
603616
604617pub fn mmtk_jl_bt_entry_jlvalue ( bt_entry : * mut mmtk_jl_bt_element_t , i : usize ) -> ObjectReference {
605618 let entry = unsafe { ( * bt_entry. add ( 2 + i) ) . __bindgen_anon_1 . jlvalue } ;
606- ObjectReference :: from_raw_address ( Address :: from_mut_ptr ( entry) )
619+ debug_assert ! ( !entry. is_null( ) ) ;
620+ unsafe { ObjectReference :: from_raw_address_unchecked ( Address :: from_mut_ptr ( entry) ) }
607621}
0 commit comments