@@ -431,6 +431,7 @@ static void jl_update_all_fptrs(void)
431431 jl_lambda_info_t * * linfos = (jl_lambda_info_t * * )malloc (sizeof (jl_lambda_info_t * ) * sysimg_fvars_max );
432432 for (i = 0 ; i < delayed_fptrs_n ; i ++ ) {
433433 jl_lambda_info_t * li = delayed_fptrs [i ].li ;
434+ if (li -> def == NULL ) continue ;
434435 int32_t func = delayed_fptrs [i ].func - 1 ;
435436 if (func >= 0 ) {
436437 jl_fptr_to_llvm ((jl_fptr_t )fvars [func ], li , 0 );
@@ -893,17 +894,20 @@ static void jl_serialize_value_(jl_serializer_state *s, jl_value_t *v)
893894 jl_serialize_value (s , (jl_value_t * )li -> sparam_syms );
894895 jl_serialize_value (s , (jl_value_t * )li -> sparam_vals );
895896 jl_serialize_value (s , (jl_value_t * )li -> specTypes );
897+ jl_serialize_value (s , (jl_value_t * )li -> backedges );
896898 write_int8 (s -> s , li -> inferred );
897899 write_int8 (s -> s , li -> pure );
898900 write_int8 (s -> s , li -> inlineable );
899901 write_int8 (s -> s , li -> isva );
900902 write_int32 (s -> s , li -> nargs );
901903 jl_serialize_value (s , (jl_value_t * )li -> def );
902904 jl_serialize_value (s , li -> constval );
903- jl_serialize_fptr (s , (void * )(uintptr_t )li -> fptr );
904905 // save functionObject pointers
905- write_int32 (s -> s , jl_assign_functionID (li -> functionObjectsDecls .functionObject ));
906- write_int32 (s -> s , jl_assign_functionID (li -> functionObjectsDecls .specFunctionObject ));
906+ if (li -> def ) {
907+ jl_serialize_fptr (s , (void * )(uintptr_t )li -> fptr );
908+ write_int32 (s -> s , jl_assign_functionID (li -> functionObjectsDecls .functionObject ));
909+ write_int32 (s -> s , jl_assign_functionID (li -> functionObjectsDecls .specFunctionObject ));
910+ }
907911 write_int8 (s -> s , li -> jlcall_api );
908912 }
909913 else if (jl_typeis (v , jl_module_type )) {
@@ -1512,6 +1516,8 @@ static jl_value_t *jl_deserialize_value_(jl_serializer_state *s, jl_value_t *vta
15121516 jl_gc_wb (li , li -> sparam_vals );
15131517 li -> specTypes = (jl_tupletype_t * )jl_deserialize_value (s , (jl_value_t * * )& li -> specTypes );
15141518 if (li -> specTypes ) jl_gc_wb (li , li -> specTypes );
1519+ li -> backedges = (jl_array_t * )jl_deserialize_value (s , (jl_value_t * * )& li -> backedges );
1520+ if (li -> backedges ) jl_gc_wb (li , li -> backedges );
15151521 li -> unspecialized_ducttape = NULL ;
15161522 li -> inferred = read_int8 (s -> s );
15171523 li -> pure = read_int8 (s -> s );
@@ -1527,11 +1533,16 @@ static jl_value_t *jl_deserialize_value_(jl_serializer_state *s, jl_value_t *vta
15271533 li -> functionObjectsDecls .specFunctionObject = NULL ;
15281534 li -> inInference = 0 ;
15291535 li -> inCompile = 0 ;
1530- li -> fptr = jl_deserialize_fptr (s );
1531- int32_t cfunc_llvm , func_llvm ;
1532- func_llvm = read_int32 (s -> s );
1533- cfunc_llvm = read_int32 (s -> s );
1534- jl_delayed_fptrs (li , func_llvm , cfunc_llvm );
1536+ if (li -> def ) {
1537+ li -> fptr = jl_deserialize_fptr (s );
1538+ int32_t cfunc_llvm , func_llvm ;
1539+ func_llvm = read_int32 (s -> s );
1540+ cfunc_llvm = read_int32 (s -> s );
1541+ jl_delayed_fptrs (li , func_llvm , cfunc_llvm );
1542+ }
1543+ else {
1544+ li -> fptr = NULL ;
1545+ }
15351546 li -> jlcall_api = read_int8 (s -> s );
15361547 li -> compile_traced = 0 ;
15371548 return (jl_value_t * )li ;
0 commit comments