Generate the global type info member values even if the count is 0

This commit is contained in:
gingerBill
2023-09-27 11:44:29 +01:00
parent acc29fbceb
commit c529b1b73a
+50 -52
View File
@@ -2273,65 +2273,63 @@ gb_internal bool lb_generate_code(lbGenerator *gen) {
} }
} }
if (count > 0) { {
{ char const *name = LB_TYPE_INFO_TYPES_NAME;
char const *name = LB_TYPE_INFO_TYPES_NAME; Type *t = alloc_type_array(t_type_info_ptr, count);
Type *t = alloc_type_array(t_type_info_ptr, count); LLVMValueRef g = LLVMAddGlobal(m->mod, lb_type(m, t), name);
LLVMValueRef g = LLVMAddGlobal(m->mod, lb_type(m, t), name); LLVMSetInitializer(g, LLVMConstNull(lb_type(m, t)));
LLVMSetInitializer(g, LLVMConstNull(lb_type(m, t))); LLVMSetLinkage(g, LLVMInternalLinkage);
LLVMSetLinkage(g, LLVMInternalLinkage); if (LB_USE_GIANT_PACKED_STRUCT) {
if (LB_USE_GIANT_PACKED_STRUCT) { lb_make_global_private_const(g);
lb_make_global_private_const(g); }
} lb_global_type_info_member_types = lb_addr({g, alloc_type_pointer(t)});
lb_global_type_info_member_types = lb_addr({g, alloc_type_pointer(t)});
}
{
char const *name = LB_TYPE_INFO_NAMES_NAME;
Type *t = alloc_type_array(t_string, count);
LLVMValueRef g = LLVMAddGlobal(m->mod, lb_type(m, t), name);
LLVMSetInitializer(g, LLVMConstNull(lb_type(m, t)));
LLVMSetLinkage(g, LLVMInternalLinkage);
if (LB_USE_GIANT_PACKED_STRUCT) {
lb_make_global_private_const(g);
} }
{ lb_global_type_info_member_names = lb_addr({g, alloc_type_pointer(t)});
char const *name = LB_TYPE_INFO_NAMES_NAME; }
Type *t = alloc_type_array(t_string, count); {
LLVMValueRef g = LLVMAddGlobal(m->mod, lb_type(m, t), name); char const *name = LB_TYPE_INFO_OFFSETS_NAME;
LLVMSetInitializer(g, LLVMConstNull(lb_type(m, t))); Type *t = alloc_type_array(t_uintptr, count);
LLVMSetLinkage(g, LLVMInternalLinkage); LLVMValueRef g = LLVMAddGlobal(m->mod, lb_type(m, t), name);
if (LB_USE_GIANT_PACKED_STRUCT) { LLVMSetInitializer(g, LLVMConstNull(lb_type(m, t)));
lb_make_global_private_const(g); LLVMSetLinkage(g, LLVMInternalLinkage);
} if (LB_USE_GIANT_PACKED_STRUCT) {
lb_global_type_info_member_names = lb_addr({g, alloc_type_pointer(t)}); lb_make_global_private_const(g);
}
{
char const *name = LB_TYPE_INFO_OFFSETS_NAME;
Type *t = alloc_type_array(t_uintptr, count);
LLVMValueRef g = LLVMAddGlobal(m->mod, lb_type(m, t), name);
LLVMSetInitializer(g, LLVMConstNull(lb_type(m, t)));
LLVMSetLinkage(g, LLVMInternalLinkage);
if (LB_USE_GIANT_PACKED_STRUCT) {
lb_make_global_private_const(g);
}
lb_global_type_info_member_offsets = lb_addr({g, alloc_type_pointer(t)});
} }
lb_global_type_info_member_offsets = lb_addr({g, alloc_type_pointer(t)});
}
{ {
char const *name = LB_TYPE_INFO_USINGS_NAME; char const *name = LB_TYPE_INFO_USINGS_NAME;
Type *t = alloc_type_array(t_bool, count); Type *t = alloc_type_array(t_bool, count);
LLVMValueRef g = LLVMAddGlobal(m->mod, lb_type(m, t), name); LLVMValueRef g = LLVMAddGlobal(m->mod, lb_type(m, t), name);
LLVMSetInitializer(g, LLVMConstNull(lb_type(m, t))); LLVMSetInitializer(g, LLVMConstNull(lb_type(m, t)));
LLVMSetLinkage(g, LLVMInternalLinkage); LLVMSetLinkage(g, LLVMInternalLinkage);
if (LB_USE_GIANT_PACKED_STRUCT) { if (LB_USE_GIANT_PACKED_STRUCT) {
lb_make_global_private_const(g); lb_make_global_private_const(g);
}
lb_global_type_info_member_usings = lb_addr({g, alloc_type_pointer(t)});
} }
lb_global_type_info_member_usings = lb_addr({g, alloc_type_pointer(t)});
}
{ {
char const *name = LB_TYPE_INFO_TAGS_NAME; char const *name = LB_TYPE_INFO_TAGS_NAME;
Type *t = alloc_type_array(t_string, count); Type *t = alloc_type_array(t_string, count);
LLVMValueRef g = LLVMAddGlobal(m->mod, lb_type(m, t), name); LLVMValueRef g = LLVMAddGlobal(m->mod, lb_type(m, t), name);
LLVMSetInitializer(g, LLVMConstNull(lb_type(m, t))); LLVMSetInitializer(g, LLVMConstNull(lb_type(m, t)));
LLVMSetLinkage(g, LLVMInternalLinkage); LLVMSetLinkage(g, LLVMInternalLinkage);
if (LB_USE_GIANT_PACKED_STRUCT) { if (LB_USE_GIANT_PACKED_STRUCT) {
lb_make_global_private_const(g); lb_make_global_private_const(g);
}
lb_global_type_info_member_tags = lb_addr({g, alloc_type_pointer(t)});
} }
lb_global_type_info_member_tags = lb_addr({g, alloc_type_pointer(t)});
} }
} }
} }