aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoravanspector <avanspector@gmail.com>2025-01-10 06:42:42 +0100
committeravanspector <avanspector@gmail.com>2025-01-10 06:42:42 +0100
commit9868c8292b36ef854eab7beafb1c8154d49d98f0 (patch)
treeafdaa5b7a0df1834a3243f17ddcea327cef558dd /src
parenta704000c347815a621b7b69cdc24446377e7c97c (diff)
parent1dc5753a0f6468315a4111b9a57968c349a5d659 (diff)
Merge branch 'master' of https://github.com/avanspector/Odin
Diffstat (limited to 'src')
-rw-r--r--src/llvm_backend_debug.cpp13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/llvm_backend_debug.cpp b/src/llvm_backend_debug.cpp
index 464f7065c..fbb25960a 100644
--- a/src/llvm_backend_debug.cpp
+++ b/src/llvm_backend_debug.cpp
@@ -408,13 +408,18 @@ gb_internal LLVMMetadataRef lb_debug_union(lbModule *m, Type *type, String name,
lb_set_llvm_metadata(m, type, temp_forward_decl);
isize index_offset = 1;
+ isize variant_offset = 1;
if (is_type_union_maybe_pointer(bt)) {
index_offset = 0;
+ variant_offset = 0;
+ } else if (bt->Union.kind == UnionType_no_nil) {
+ variant_offset = 0;
}
LLVMMetadataRef member_scope = lb_get_llvm_metadata(m, bt->Union.scope);
unsigned element_count = cast(unsigned)bt->Union.variants.count;
if (index_offset > 0) {
+ GB_ASSERT(index_offset == 1);
element_count += 1;
}
@@ -437,13 +442,11 @@ gb_internal LLVMMetadataRef lb_debug_union(lbModule *m, Type *type, String name,
for_array(j, bt->Union.variants) {
Type *variant = bt->Union.variants[j];
- unsigned field_index = cast(unsigned)(index_offset+j);
-
- char name[16] = {};
- gb_snprintf(name, gb_size_of(name), "v%u", field_index);
+ char name[32] = {};
+ gb_snprintf(name, gb_size_of(name), "v%td", variant_offset+j);
isize name_len = gb_strlen(name);
- elements[field_index] = LLVMDIBuilderCreateMemberType(
+ elements[index_offset+j] = LLVMDIBuilderCreateMemberType(
m->debug_builder, member_scope,
name, name_len,
file, line,