authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2017-11-02 21:53:50-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2017-11-02 21:57:55-04:00
logdc8b011d616991da166ad83795bf0b7e90471bd3
treed931c6d99ce0d7a8a90a615530592e34405c2d41
parentabff1b688420eb30d98145d8bc48e7d08f259885

fix incorrect debug info for empty structs

closes #579 now all tests pass for llvm master branch

1 files changed, 15 insertions(+), 2 deletions(-)

src/analyze.cpp+15-2
...@@ -1712,8 +1712,21 @@ static void resolve_struct_type(CodeGen *g, TypeTableEntry *struct_type) {...@@ -1712,8 +1712,21 @@ static void resolve_struct_type(CodeGen *g, TypeTableEntry *struct_type) {
17121712
1713 if (struct_type->zero_bits) {1713 if (struct_type->zero_bits) {
1714 struct_type->type_ref = LLVMVoidType();1714 struct_type->type_ref = LLVMVoidType();
1715 ZigLLVMReplaceTemporary(g->dbuilder, struct_type->di_type, g->builtin_types.entry_void->di_type);1715
1716 struct_type->di_type = g->builtin_types.entry_void->di_type;1716 ImportTableEntry *import = get_scope_import(scope);
1717 uint64_t debug_size_in_bits = 0;
1718 uint64_t debug_align_in_bits = 0;
1719 ZigLLVMDIType **di_element_types = nullptr;
1720 size_t debug_field_count = 0;
1721 ZigLLVMDIType *replacement_di_type = ZigLLVMCreateDebugStructType(g->dbuilder,
1722 ZigLLVMFileToScope(import->di_file),
1723 buf_ptr(&struct_type->name),
1724 import->di_file, (unsigned)(decl_node->line + 1),
1725 debug_size_in_bits,
1726 debug_align_in_bits,
1727 0, nullptr, di_element_types, (int)debug_field_count, 0, nullptr, "");
1728 ZigLLVMReplaceTemporary(g->dbuilder, struct_type->di_type, replacement_di_type);
1729 struct_type->di_type = replacement_di_type;
1717 return;1730 return;
1718 }1731 }
1719 assert(struct_type->di_type);1732 assert(struct_type->di_type);