@@ -36,7 +36,7 @@ JL_DLLEXPORT jl_methtable_t *jl_new_method_table(jl_sym_t *name, jl_module_t *mo
3636{
3737 jl_ptls_t ptls = jl_get_ptls_states ();
3838 jl_methtable_t * mt =
39- (jl_methtable_t * )jl_gc_alloc (ptls , sizeof (jl_methtable_t ),
39+ (jl_methtable_t * )jl_gc_alloc (ptls , sizeof (jl_methtable_t ), 0 ,
4040 jl_methtable_type );
4141 mt -> name = jl_demangle_typename (name );
4242 mt -> module = module ;
@@ -53,7 +53,7 @@ JL_DLLEXPORT jl_typename_t *jl_new_typename_in(jl_sym_t *name, jl_module_t *modu
5353{
5454 jl_ptls_t ptls = jl_get_ptls_states ();
5555 jl_typename_t * tn =
56- (jl_typename_t * )jl_gc_alloc (ptls , sizeof (jl_typename_t ),
56+ (jl_typename_t * )jl_gc_alloc (ptls , sizeof (jl_typename_t ), 0 ,
5757 jl_typename_type );
5858 tn -> name = name ;
5959 tn -> module = module ;
@@ -82,7 +82,7 @@ jl_datatype_t *jl_new_abstracttype(jl_value_t *name, jl_datatype_t *super, jl_sv
8282jl_datatype_t * jl_new_uninitialized_datatype (void )
8383{
8484 jl_ptls_t ptls = jl_get_ptls_states ();
85- jl_datatype_t * t = (jl_datatype_t * )jl_gc_alloc (ptls , sizeof (jl_datatype_t ), jl_datatype_type );
85+ jl_datatype_t * t = (jl_datatype_t * )jl_gc_alloc (ptls , sizeof (jl_datatype_t ), 0 , jl_datatype_type );
8686 t -> depth = 0 ;
8787 t -> hasfreetypevars = 0 ;
8888 t -> isleaftype = 1 ;
@@ -451,7 +451,7 @@ static jl_value_t *jl_new_bits_internal(jl_value_t *dt, void *data, size_t *len)
451451 if (bt == jl_int32_type ) return jl_box_int32 (* (int32_t * )data );
452452 if (bt == jl_float64_type ) return jl_box_float64 (* (double * )data );
453453
454- jl_value_t * v = jl_gc_alloc (ptls , nb , bt );
454+ jl_value_t * v = jl_gc_alloc (ptls , nb , jl_datatype_align ( bt ), bt );
455455 switch (nb ) {
456456 case 1 : * (int8_t * ) jl_data_ptr (v ) = * (int8_t * )data ; break ;
457457 case 2 : * (int16_t * ) jl_data_ptr (v ) = * (int16_t * )data ; break ;
@@ -489,7 +489,8 @@ void jl_assign_bits(void *dest, jl_value_t *bits)
489489 jl_ptls_t ptls = jl_get_ptls_states(); \
490490 assert(jl_isbits(t)); \
491491 assert(jl_datatype_size(t) == sizeof(x)); \
492- jl_value_t *v = jl_gc_alloc(ptls, nw * sizeof(void*), t); \
492+ size_t align = jl_datatype_align(t); \
493+ jl_value_t *v = jl_gc_alloc(ptls, nw * sizeof(void*), align, t);\
493494 *(int##nb##_t*)jl_data_ptr(v) = x; \
494495 return v; \
495496 } \
@@ -534,7 +535,7 @@ UNBOX_FUNC(voidpointer, void*)
534535 JL_DLLEXPORT jl_value_t * pfx ##_ ##typ (c_type x) \
535536 { \
536537 jl_ptls_t ptls = jl_get_ptls_states(); \
537- jl_value_t *v = jl_gc_alloc(ptls, nw * sizeof(void*), \
538+ jl_value_t *v = jl_gc_alloc(ptls, nw * sizeof(void*), 0, \
538539 jl_##typ##_type); \
539540 *(c_type*)jl_data_ptr(v) = x; \
540541 return v; \
@@ -557,7 +558,7 @@ BOX_FUNC(float64, double, jl_box, 2)
557558 c_type idx = x+NBOX_C/2; \
558559 if ((u##c_type)idx < (u##c_type)NBOX_C) \
559560 return boxed_##typ##_cache[idx]; \
560- jl_value_t *v = jl_gc_alloc(ptls, nw * sizeof(void*), \
561+ jl_value_t *v = jl_gc_alloc(ptls, nw * sizeof(void*), 0, \
561562 jl_##typ##_type); \
562563 *(c_type*)jl_data_ptr(v) = x; \
563564 return v; \
@@ -569,7 +570,7 @@ BOX_FUNC(float64, double, jl_box, 2)
569570 jl_ptls_t ptls = jl_get_ptls_states(); \
570571 if (x < NBOX_C) \
571572 return boxed_##typ##_cache[x]; \
572- jl_value_t *v = jl_gc_alloc(ptls, nw * sizeof(void*), \
573+ jl_value_t *v = jl_gc_alloc(ptls, nw * sizeof(void*), 0, \
573574 jl_##typ##_type); \
574575 *(c_type*)jl_data_ptr(v) = x; \
575576 return v; \
@@ -650,7 +651,7 @@ JL_DLLEXPORT jl_value_t *jl_new_struct(jl_datatype_t *type, ...)
650651 va_list args ;
651652 size_t nf = jl_datatype_nfields (type );
652653 va_start (args , type );
653- jl_value_t * jv = jl_gc_alloc (ptls , jl_datatype_size (type ), type );
654+ jl_value_t * jv = jl_gc_alloc (ptls , jl_datatype_size (type ), jl_datatype_align ( type ), type );
654655 for (size_t i = 0 ; i < nf ; i ++ ) {
655656 jl_set_nth_field (jv , i , va_arg (args , jl_value_t * ));
656657 }
@@ -664,7 +665,7 @@ JL_DLLEXPORT jl_value_t *jl_new_structv(jl_datatype_t *type, jl_value_t **args,
664665 jl_ptls_t ptls = jl_get_ptls_states ();
665666 if (type -> instance != NULL ) return type -> instance ;
666667 size_t nf = jl_datatype_nfields (type );
667- jl_value_t * jv = jl_gc_alloc (ptls , jl_datatype_size (type ), type );
668+ jl_value_t * jv = jl_gc_alloc (ptls , jl_datatype_size (type ), jl_datatype_align ( type ), type );
668669 for (size_t i = 0 ; i < na ; i ++ ) {
669670 jl_set_nth_field (jv , i , args [i ]);
670671 }
@@ -680,8 +681,9 @@ JL_DLLEXPORT jl_value_t *jl_new_struct_uninit(jl_datatype_t *type)
680681{
681682 jl_ptls_t ptls = jl_get_ptls_states ();
682683 if (type -> instance != NULL ) return type -> instance ;
683- size_t size = jl_datatype_size (type );
684- jl_value_t * jv = jl_gc_alloc (ptls , size , type );
684+ size_t size = jl_datatype_size (type );
685+ size_t align = jl_datatype_align (type );
686+ jl_value_t * jv = jl_gc_alloc (ptls , size , align , type );
685687 if (size > 0 )
686688 memset (jl_data_ptr (jv ), 0 , size );
687689 return jv ;
0 commit comments