@@ -2064,7 +2064,8 @@ STATIC_INLINE void gc_mark_objarray(jl_ptls_t ptls, jl_value_t *obj_parent, jl_v
20642064 // the first young object before starting this chunk
20652065 // (this also would be valid for young objects, but probably less beneficial)
20662066 for (; obj_begin < obj_end ; obj_begin += step ) {
2067- new_obj = * obj_begin ;
2067+ jl_value_t * * slot = obj_begin ;
2068+ new_obj = * slot ;
20682069 if (new_obj != NULL ) {
20692070 verify_parent2 ("obj array" , obj_parent , obj_begin , "elem(%d)" ,
20702071 gc_slot_to_arrayidx (obj_parent , obj_begin ));
@@ -2073,7 +2074,7 @@ STATIC_INLINE void gc_mark_objarray(jl_ptls_t ptls, jl_value_t *obj_parent, jl_v
20732074 nptr |= 1 ;
20742075 if (!gc_marked (o -> header ))
20752076 break ;
2076- gc_heap_snapshot_record_array_edge (obj_parent , & new_obj );
2077+ gc_heap_snapshot_record_array_edge (obj_parent , slot );
20772078 }
20782079 }
20792080 }
@@ -2095,13 +2096,14 @@ STATIC_INLINE void gc_mark_objarray(jl_ptls_t ptls, jl_value_t *obj_parent, jl_v
20952096 }
20962097 }
20972098 for (; obj_begin < scan_end ; obj_begin += step ) {
2099+ jl_value_t * * slot = obj_begin ;
20982100 new_obj = * obj_begin ;
20992101 if (new_obj != NULL ) {
21002102 verify_parent2 ("obj array" , obj_parent , obj_begin , "elem(%d)" ,
21012103 gc_slot_to_arrayidx (obj_parent , obj_begin ));
21022104 gc_assert_parent_validity (obj_parent , new_obj );
21032105 gc_try_claim_and_push (mq , new_obj , & nptr );
2104- gc_heap_snapshot_record_array_edge (obj_parent , & new_obj );
2106+ gc_heap_snapshot_record_array_edge (obj_parent , slot );
21052107 }
21062108 }
21072109 if (too_big ) {
@@ -2132,7 +2134,8 @@ STATIC_INLINE void gc_mark_array8(jl_ptls_t ptls, jl_value_t *ary8_parent, jl_va
21322134 for (; ary8_begin < ary8_end ; ary8_begin += elsize ) {
21332135 int early_end = 0 ;
21342136 for (uint8_t * pindex = elem_begin ; pindex < elem_end ; pindex ++ ) {
2135- new_obj = ary8_begin [* pindex ];
2137+ jl_value_t * * slot = & ary8_begin [* pindex ];
2138+ new_obj = * slot ;
21362139 if (new_obj != NULL ) {
21372140 verify_parent2 ("array" , ary8_parent , & new_obj , "elem(%d)" ,
21382141 gc_slot_to_arrayidx (ary8_parent , ary8_begin ));
@@ -2143,7 +2146,7 @@ STATIC_INLINE void gc_mark_array8(jl_ptls_t ptls, jl_value_t *ary8_parent, jl_va
21432146 early_end = 1 ;
21442147 break ;
21452148 }
2146- gc_heap_snapshot_record_array_edge (ary8_parent , & new_obj );
2149+ gc_heap_snapshot_record_array_edge (ary8_parent , slot );
21472150 }
21482151 }
21492152 if (early_end )
@@ -2169,13 +2172,14 @@ STATIC_INLINE void gc_mark_array8(jl_ptls_t ptls, jl_value_t *ary8_parent, jl_va
21692172 }
21702173 for (; ary8_begin < ary8_end ; ary8_begin += elsize ) {
21712174 for (uint8_t * pindex = elem_begin ; pindex < elem_end ; pindex ++ ) {
2172- new_obj = ary8_begin [* pindex ];
2175+ jl_value_t * * slot = & ary8_begin [* pindex ];
2176+ new_obj = * slot ;
21732177 if (new_obj != NULL ) {
21742178 verify_parent2 ("array" , ary8_parent , & new_obj , "elem(%d)" ,
21752179 gc_slot_to_arrayidx (ary8_parent , ary8_begin ));
21762180 gc_assert_parent_validity (ary8_parent , new_obj );
21772181 gc_try_claim_and_push (mq , new_obj , & nptr );
2178- gc_heap_snapshot_record_array_edge (ary8_parent , & new_obj );
2182+ gc_heap_snapshot_record_array_edge (ary8_parent , slot );
21792183 }
21802184 }
21812185 }
@@ -2207,7 +2211,8 @@ STATIC_INLINE void gc_mark_array16(jl_ptls_t ptls, jl_value_t *ary16_parent, jl_
22072211 for (; ary16_begin < ary16_end ; ary16_begin += elsize ) {
22082212 int early_end = 0 ;
22092213 for (uint16_t * pindex = elem_begin ; pindex < elem_end ; pindex ++ ) {
2210- new_obj = ary16_begin [* pindex ];
2214+ jl_value_t * * slot = & ary16_begin [* pindex ];
2215+ new_obj = * slot ;
22112216 if (new_obj != NULL ) {
22122217 verify_parent2 ("array" , ary16_parent , & new_obj , "elem(%d)" ,
22132218 gc_slot_to_arrayidx (ary16_parent , ary16_begin ));
@@ -2218,7 +2223,7 @@ STATIC_INLINE void gc_mark_array16(jl_ptls_t ptls, jl_value_t *ary16_parent, jl_
22182223 early_end = 1 ;
22192224 break ;
22202225 }
2221- gc_heap_snapshot_record_array_edge (ary16_parent , & new_obj );
2226+ gc_heap_snapshot_record_array_edge (ary16_parent , slot );
22222227 }
22232228 }
22242229 if (early_end )
@@ -2244,13 +2249,14 @@ STATIC_INLINE void gc_mark_array16(jl_ptls_t ptls, jl_value_t *ary16_parent, jl_
22442249 }
22452250 for (; ary16_begin < scan_end ; ary16_begin += elsize ) {
22462251 for (uint16_t * pindex = elem_begin ; pindex < elem_end ; pindex ++ ) {
2247- new_obj = ary16_begin [* pindex ];
2252+ jl_value_t * * slot = & ary16_begin [* pindex ];
2253+ new_obj = * slot ;
22482254 if (new_obj != NULL ) {
22492255 verify_parent2 ("array" , ary16_parent , & new_obj , "elem(%d)" ,
22502256 gc_slot_to_arrayidx (ary16_parent , ary16_begin ));
22512257 gc_assert_parent_validity (ary16_parent , new_obj );
22522258 gc_try_claim_and_push (mq , new_obj , & nptr );
2253- gc_heap_snapshot_record_array_edge (ary16_parent , & new_obj );
2259+ gc_heap_snapshot_record_array_edge (ary16_parent , slot );
22542260 }
22552261 }
22562262 }
0 commit comments