diff options
| author | avanspector <avanspector@gmail.com> | 2025-01-10 06:42:42 +0100 |
|---|---|---|
| committer | avanspector <avanspector@gmail.com> | 2025-01-10 06:42:42 +0100 |
| commit | 9868c8292b36ef854eab7beafb1c8154d49d98f0 (patch) | |
| tree | afdaa5b7a0df1834a3243f17ddcea327cef558dd /src | |
| parent | a704000c347815a621b7b69cdc24446377e7c97c (diff) | |
| parent | 1dc5753a0f6468315a4111b9a57968c349a5d659 (diff) | |
Merge branch 'master' of https://github.com/avanspector/Odin
Diffstat (limited to 'src')
| -rw-r--r-- | src/llvm_backend_debug.cpp | 13 |
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, |