@@ -403,7 +403,10 @@ static void jl_serialize_datatype(jl_serializer_state *s, jl_datatype_t *dt) JL_
403
403
uint32_t np = dt -> layout -> npointers ;
404
404
size_t fieldsize = jl_fielddesc_size (dt -> layout -> fielddesc_type );
405
405
ios_write (s -> s , (const char * )dt -> layout , sizeof (* dt -> layout ));
406
- ios_write (s -> s , (const char * )(dt -> layout + 1 ), nf * fieldsize + (np << dt -> layout -> fielddesc_type ));
406
+ size_t fldsize = nf * fieldsize ;
407
+ if (dt -> layout -> first_ptr != -1 )
408
+ fldsize += np << dt -> layout -> fielddesc_type ;
409
+ ios_write (s -> s , (const char * )(dt -> layout + 1 ), fldsize );
407
410
}
408
411
}
409
412
@@ -1484,11 +1487,14 @@ static jl_value_t *jl_deserialize_datatype(jl_serializer_state *s, int pos, jl_v
1484
1487
uint32_t np = buffer .npointers ;
1485
1488
uint8_t fielddesc_type = buffer .fielddesc_type ;
1486
1489
size_t fielddesc_size = nf > 0 ? jl_fielddesc_size (fielddesc_type ) : 0 ;
1490
+ size_t fldsize = nf * fielddesc_size ;
1491
+ if (buffer .first_ptr != -1 )
1492
+ fldsize += np << fielddesc_type ;
1487
1493
jl_datatype_layout_t * layout = (jl_datatype_layout_t * )jl_gc_perm_alloc (
1488
- sizeof (jl_datatype_layout_t ) + nf * fielddesc_size + ( np << fielddesc_type ) ,
1494
+ sizeof (jl_datatype_layout_t ) + fldsize ,
1489
1495
0 , 4 , 0 );
1490
1496
* layout = buffer ;
1491
- ios_read (s -> s , (char * )(layout + 1 ), nf * fielddesc_size + ( np << fielddesc_type ) );
1497
+ ios_read (s -> s , (char * )(layout + 1 ), fldsize );
1492
1498
dt -> layout = layout ;
1493
1499
}
1494
1500
}
0 commit comments