aboutsummaryrefslogtreecommitdiff
path: root/src/llvm_backend.cpp
diff options
context:
space:
mode:
authoravanspector <avanspector@gmail.com>2024-02-25 02:24:58 +0100
committeravanspector <avanspector@gmail.com>2024-02-25 02:24:58 +0100
commit0a6673220bd50c05f8c5c5bd34e79b8f676152e2 (patch)
treedfe13c71ddfe9d654420658a9f23c1c318a5c11d /src/llvm_backend.cpp
parent88add0b6b12b6590fd69bb74182f1a7689ae9ff6 (diff)
parenta642ea0b28f8b1edad247b484ae000f20218347d (diff)
Merge branch 'haiku' of https://github.com/avanspector/Odin into haiku
Diffstat (limited to 'src/llvm_backend.cpp')
-rw-r--r--src/llvm_backend.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp
index 01d7a23b2..eb90ae073 100644
--- a/src/llvm_backend.cpp
+++ b/src/llvm_backend.cpp
@@ -2719,6 +2719,7 @@ gb_internal bool lb_generate_code(lbGenerator *gen) {
{ // Type info member buffer
// NOTE(bill): Removes need for heap allocation by making it global memory
isize count = 0;
+ isize offsets_extra = 0;
for (Type *t : m->info->type_info_types) {
isize index = lb_type_info_index(m->info, t, false);
@@ -2736,6 +2737,11 @@ gb_internal bool lb_generate_code(lbGenerator *gen) {
case Type_Tuple:
count += t->Tuple.variables.count;
break;
+ case Type_BitField:
+ count += t->BitField.fields.count;
+ // Twice is needed for the bit_offsets
+ offsets_extra += t->BitField.fields.count;
+ break;
}
}
@@ -2752,7 +2758,7 @@ gb_internal bool lb_generate_code(lbGenerator *gen) {
lb_global_type_info_member_types = global_type_info_make(m, LB_TYPE_INFO_TYPES_NAME, t_type_info_ptr, count);
lb_global_type_info_member_names = global_type_info_make(m, LB_TYPE_INFO_NAMES_NAME, t_string, count);
- lb_global_type_info_member_offsets = global_type_info_make(m, LB_TYPE_INFO_OFFSETS_NAME, t_uintptr, count);
+ lb_global_type_info_member_offsets = global_type_info_make(m, LB_TYPE_INFO_OFFSETS_NAME, t_uintptr, count+offsets_extra);
lb_global_type_info_member_usings = global_type_info_make(m, LB_TYPE_INFO_USINGS_NAME, t_bool, count);
lb_global_type_info_member_tags = global_type_info_make(m, LB_TYPE_INFO_TAGS_NAME, t_string, count);
}