authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2016-02-04 14:02:37-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2016-02-04 14:02:37-07:00
logb87d0abefeeeed4d9ce981971a5e33a6d0932529
treef8f817222a2f2c49ad67fc6cfe1ca98b3278868f
parent25e74cb385dc353bcf0e56b35a6f1c7c8b13267e

fix debug info for bool type


5 files changed, 57 insertions(+), 27 deletions(-)

src/analyze.cpp+15-15
......@@ -211,7 +211,7 @@ TypeTableEntry *get_pointer_to_type(CodeGen *g, TypeTableEntry *child_type, bool
211211 if (!entry->zero_bits) {
212212 entry->type_ref = LLVMPointerType(child_type->type_ref, 0);
213213
214 uint64_t debug_size_in_bits = LLVMSizeOfTypeInBits(g->target_data_ref, entry->type_ref);
214 uint64_t debug_size_in_bits = 8*LLVMStoreSizeOfType(g->target_data_ref, entry->type_ref);
215215 uint64_t debug_align_in_bits = 8*LLVMABISizeOfType(g->target_data_ref, entry->type_ref);
216216 assert(child_type->di_type);
217217 entry->di_type = LLVMZigCreateDebugPointerType(g->dbuilder, child_type->di_type,
......@@ -262,16 +262,16 @@ TypeTableEntry *get_maybe_type(CodeGen *g, TypeTableEntry *child_type) {
262262 LLVMZigTag_DW_structure_type(), buf_ptr(&entry->name),
263263 compile_unit_scope, di_file, line);
264264
265 uint64_t val_debug_size_in_bits = LLVMSizeOfTypeInBits(g->target_data_ref, child_type->type_ref);
265 uint64_t val_debug_size_in_bits = 8*LLVMStoreSizeOfType(g->target_data_ref, child_type->type_ref);
266266 uint64_t val_debug_align_in_bits = 8*LLVMABISizeOfType(g->target_data_ref, child_type->type_ref);
267267 uint64_t val_offset_in_bits = 8*LLVMOffsetOfElement(g->target_data_ref, entry->type_ref, 0);
268268
269269 TypeTableEntry *bool_type = g->builtin_types.entry_bool;
270 uint64_t maybe_debug_size_in_bits = LLVMSizeOfTypeInBits(g->target_data_ref, bool_type->type_ref);
270 uint64_t maybe_debug_size_in_bits = 8*LLVMStoreSizeOfType(g->target_data_ref, bool_type->type_ref);
271271 uint64_t maybe_debug_align_in_bits = 8*LLVMABISizeOfType(g->target_data_ref, bool_type->type_ref);
272272 uint64_t maybe_offset_in_bits = 8*LLVMOffsetOfElement(g->target_data_ref, entry->type_ref, 1);
273273
274 uint64_t debug_size_in_bits = LLVMSizeOfTypeInBits(g->target_data_ref, entry->type_ref);
274 uint64_t debug_size_in_bits = 8*LLVMStoreSizeOfType(g->target_data_ref, entry->type_ref);
275275 uint64_t debug_align_in_bits = 8*LLVMABISizeOfType(g->target_data_ref, entry->type_ref);
276276
277277 LLVMZigDIType *di_element_types[] = {
......@@ -336,15 +336,15 @@ static TypeTableEntry *get_error_type(CodeGen *g, TypeTableEntry *child_type) {
336336 LLVMZigTag_DW_structure_type(), buf_ptr(&entry->name),
337337 compile_unit_scope, di_file, line);
338338
339 uint64_t tag_debug_size_in_bits = LLVMSizeOfTypeInBits(g->target_data_ref, g->err_tag_type->type_ref);
339 uint64_t tag_debug_size_in_bits = 8*LLVMStoreSizeOfType(g->target_data_ref, g->err_tag_type->type_ref);
340340 uint64_t tag_debug_align_in_bits = 8*LLVMABISizeOfType(g->target_data_ref, g->err_tag_type->type_ref);
341341 uint64_t tag_offset_in_bits = 8*LLVMOffsetOfElement(g->target_data_ref, entry->type_ref, 0);
342342
343 uint64_t value_debug_size_in_bits = LLVMSizeOfTypeInBits(g->target_data_ref, child_type->type_ref);
343 uint64_t value_debug_size_in_bits = 8*LLVMStoreSizeOfType(g->target_data_ref, child_type->type_ref);
344344 uint64_t value_debug_align_in_bits = 8*LLVMABISizeOfType(g->target_data_ref, child_type->type_ref);
345345 uint64_t value_offset_in_bits = 8*LLVMOffsetOfElement(g->target_data_ref, entry->type_ref, 1);
346346
347 uint64_t debug_size_in_bits = LLVMSizeOfTypeInBits(g->target_data_ref, entry->type_ref);
347 uint64_t debug_size_in_bits = 8*LLVMStoreSizeOfType(g->target_data_ref, entry->type_ref);
348348 uint64_t debug_align_in_bits = 8*LLVMABISizeOfType(g->target_data_ref, entry->type_ref);
349349
350350 LLVMZigDIType *di_element_types[] = {
......@@ -393,7 +393,7 @@ TypeTableEntry *get_array_type(CodeGen *g, TypeTableEntry *child_type, uint64_t
393393 buf_resize(&entry->name, 0);
394394 buf_appendf(&entry->name, "[%" PRIu64 "]%s", array_size, buf_ptr(&child_type->name));
395395
396 uint64_t debug_size_in_bits = LLVMSizeOfTypeInBits(g->target_data_ref, entry->type_ref);
396 uint64_t debug_size_in_bits = 8*LLVMStoreSizeOfType(g->target_data_ref, entry->type_ref);
397397 uint64_t debug_align_in_bits = 8*LLVMABISizeOfType(g->target_data_ref, entry->type_ref);
398398
399399 entry->di_type = LLVMZigCreateDebugArrayType(g->dbuilder, debug_size_in_bits,
......@@ -471,7 +471,7 @@ static TypeTableEntry *get_slice_type(CodeGen *g, TypeTableEntry *child_type, bo
471471 g->builtin_types.entry_isize->di_type,
472472 };
473473 LLVMZigDIScope *compile_unit_scope = LLVMZigCompileUnitToScope(g->compile_unit);
474 uint64_t debug_size_in_bits = LLVMSizeOfTypeInBits(g->target_data_ref, entry->type_ref);
474 uint64_t debug_size_in_bits = 8*LLVMStoreSizeOfType(g->target_data_ref, entry->type_ref);
475475 uint64_t debug_align_in_bits = 8*LLVMABISizeOfType(g->target_data_ref, entry->type_ref);
476476 entry->di_type = LLVMZigCreateDebugStructType(g->dbuilder, compile_unit_scope,
477477 buf_ptr(&entry->name), g->dummy_di_file, 0, debug_size_in_bits, debug_align_in_bits, 0,
......@@ -944,7 +944,7 @@ static void resolve_enum_type(CodeGen *g, ImportTableEntry *import, TypeTableEnt
944944 continue;
945945 }
946946
947 uint64_t debug_size_in_bits = LLVMSizeOfTypeInBits(g->target_data_ref, field_type->type_ref);
947 uint64_t debug_size_in_bits = 8*LLVMStoreSizeOfType(g->target_data_ref, field_type->type_ref);
948948 uint64_t debug_align_in_bits = 8*LLVMABISizeOfType(g->target_data_ref, field_type->type_ref);
949949
950950 union_inner_di_types[gen_field_index] = LLVMZigCreateDebugMemberType(g->dbuilder,
......@@ -991,7 +991,7 @@ static void resolve_enum_type(CodeGen *g, ImportTableEntry *import, TypeTableEnt
991991 LLVMStructSetBody(enum_type->type_ref, root_struct_element_types, 2, false);
992992
993993 // create debug type for tag
994 uint64_t tag_debug_size_in_bits = LLVMSizeOfTypeInBits(g->target_data_ref, tag_type_entry->type_ref);
994 uint64_t tag_debug_size_in_bits = 8*LLVMStoreSizeOfType(g->target_data_ref, tag_type_entry->type_ref);
995995 uint64_t tag_debug_align_in_bits = 8*LLVMABISizeOfType(g->target_data_ref, tag_type_entry->type_ref);
996996 LLVMZigDIType *tag_di_type = LLVMZigCreateDebugEnumerationType(g->dbuilder,
997997 LLVMZigTypeToScope(enum_type->di_type), "AnonEnum", import->di_file, decl_node->line + 1,
......@@ -1030,7 +1030,7 @@ static void resolve_enum_type(CodeGen *g, ImportTableEntry *import, TypeTableEnt
10301030 };
10311031
10321032
1033 uint64_t debug_size_in_bits = LLVMSizeOfTypeInBits(g->target_data_ref, enum_type->type_ref);
1033 uint64_t debug_size_in_bits = 8*LLVMStoreSizeOfType(g->target_data_ref, enum_type->type_ref);
10341034 uint64_t debug_align_in_bits = 8*LLVMABISizeOfType(g->target_data_ref, enum_type->type_ref);
10351035 LLVMZigDIType *replacement_di_type = LLVMZigCreateDebugStructType(g->dbuilder,
10361036 LLVMZigFileToScope(import->di_file),
......@@ -1047,7 +1047,7 @@ static void resolve_enum_type(CodeGen *g, ImportTableEntry *import, TypeTableEnt
10471047 enum_type->type_ref = tag_type_entry->type_ref;
10481048
10491049 // create debug type for tag
1050 uint64_t tag_debug_size_in_bits = LLVMSizeOfTypeInBits(g->target_data_ref, tag_type_entry->type_ref);
1050 uint64_t tag_debug_size_in_bits = 8*LLVMStoreSizeOfType(g->target_data_ref, tag_type_entry->type_ref);
10511051 uint64_t tag_debug_align_in_bits = 8*LLVMABISizeOfType(g->target_data_ref, tag_type_entry->type_ref);
10521052 LLVMZigDIType *tag_di_type = LLVMZigCreateDebugEnumerationType(g->dbuilder,
10531053 LLVMZigFileToScope(import->di_file), buf_ptr(&decl_node->data.struct_decl.name),
......@@ -1155,7 +1155,7 @@ static void resolve_struct_type(CodeGen *g, ImportTableEntry *import, TypeTableE
11551155
11561156 TypeTableEntry *field_type = type_struct_field->type_entry;
11571157
1158 uint64_t debug_size_in_bits = LLVMSizeOfTypeInBits(g->target_data_ref, field_type->type_ref);
1158 uint64_t debug_size_in_bits = 8*LLVMStoreSizeOfType(g->target_data_ref, field_type->type_ref);
11591159 uint64_t debug_align_in_bits = 8*LLVMABISizeOfType(g->target_data_ref, field_type->type_ref);
11601160 uint64_t debug_offset_in_bits = 8*LLVMOffsetOfElement(g->target_data_ref, struct_type->type_ref,
11611161 gen_field_index);
......@@ -1171,7 +1171,7 @@ static void resolve_struct_type(CodeGen *g, ImportTableEntry *import, TypeTableE
11711171 }
11721172
11731173
1174 uint64_t debug_size_in_bits = LLVMSizeOfTypeInBits(g->target_data_ref, struct_type->type_ref);
1174 uint64_t debug_size_in_bits = 8*LLVMStoreSizeOfType(g->target_data_ref, struct_type->type_ref);
11751175 uint64_t debug_align_in_bits = 8*LLVMABISizeOfType(g->target_data_ref, struct_type->type_ref);
11761176 LLVMZigDIType *replacement_di_type = LLVMZigCreateDebugStructType(g->dbuilder,
11771177 LLVMZigFileToScope(import->di_file),
src/codegen.cpp+24-9
......@@ -3104,7 +3104,22 @@ static void define_builtin_types(CodeGen *g) {
31043104 buf_resize(&entry->name, 0);
31053105 buf_appendf(&entry->name, "%c%d", u_or_i, size_in_bits);
31063106
3107 uint64_t debug_size_in_bits = LLVMSizeOfTypeInBits(g->target_data_ref, entry->type_ref);
3107 unsigned dwarf_tag;
3108 if (is_signed) {
3109 if (size_in_bits == 8) {
3110 dwarf_tag = LLVMZigEncoding_DW_ATE_signed_char();
3111 } else {
3112 dwarf_tag = LLVMZigEncoding_DW_ATE_signed();
3113 }
3114 } else {
3115 if (size_in_bits == 8) {
3116 dwarf_tag = LLVMZigEncoding_DW_ATE_unsigned_char();
3117 } else {
3118 dwarf_tag = LLVMZigEncoding_DW_ATE_unsigned();
3119 }
3120 }
3121
3122 uint64_t debug_size_in_bits = 8*LLVMStoreSizeOfType(g->target_data_ref, entry->type_ref);
31083123 uint64_t debug_align_in_bits = 8*LLVMABISizeOfType(g->target_data_ref, entry->type_ref);
31093124 entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),
31103125 debug_size_in_bits, debug_align_in_bits,
......@@ -3133,7 +3148,7 @@ static void define_builtin_types(CodeGen *g) {
31333148
31343149 buf_init_from_str(&entry->name, info->name);
31353150
3136 uint64_t debug_size_in_bits = LLVMSizeOfTypeInBits(g->target_data_ref, entry->type_ref);
3151 uint64_t debug_size_in_bits = 8*LLVMStoreSizeOfType(g->target_data_ref, entry->type_ref);
31373152 uint64_t debug_align_in_bits = 8*LLVMABISizeOfType(g->target_data_ref, entry->type_ref);
31383153 entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),
31393154 debug_size_in_bits,
......@@ -3150,12 +3165,12 @@ static void define_builtin_types(CodeGen *g) {
31503165 TypeTableEntry *entry = new_type_table_entry(TypeTableEntryIdBool);
31513166 entry->type_ref = LLVMInt1Type();
31523167 buf_init_from_str(&entry->name, "bool");
3153 uint64_t debug_size_in_bits = LLVMSizeOfTypeInBits(g->target_data_ref, entry->type_ref);
3168 uint64_t debug_size_in_bits = 8*LLVMStoreSizeOfType(g->target_data_ref, entry->type_ref);
31543169 uint64_t debug_align_in_bits = 8*LLVMABISizeOfType(g->target_data_ref, entry->type_ref);
31553170 entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),
31563171 debug_size_in_bits,
31573172 debug_align_in_bits,
3158 LLVMZigEncoding_DW_ATE_unsigned());
3173 LLVMZigEncoding_DW_ATE_boolean());
31593174 g->builtin_types.entry_bool = entry;
31603175 g->primitive_type_table.put(&entry->name, entry);
31613176 }
......@@ -3166,7 +3181,7 @@ static void define_builtin_types(CodeGen *g) {
31663181 entry->data.integral.is_signed = true;
31673182 entry->data.integral.bit_count = g->pointer_size_bytes * 8;
31683183
3169 uint64_t debug_size_in_bits = LLVMSizeOfTypeInBits(g->target_data_ref, entry->type_ref);
3184 uint64_t debug_size_in_bits = 8*LLVMStoreSizeOfType(g->target_data_ref, entry->type_ref);
31703185 uint64_t debug_align_in_bits = 8*LLVMABISizeOfType(g->target_data_ref, entry->type_ref);
31713186 entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),
31723187 debug_size_in_bits,
......@@ -3182,7 +3197,7 @@ static void define_builtin_types(CodeGen *g) {
31823197 entry->data.integral.is_signed = false;
31833198 entry->data.integral.bit_count = g->pointer_size_bytes * 8;
31843199
3185 uint64_t debug_size_in_bits = LLVMSizeOfTypeInBits(g->target_data_ref, entry->type_ref);
3200 uint64_t debug_size_in_bits = 8*LLVMStoreSizeOfType(g->target_data_ref, entry->type_ref);
31863201 uint64_t debug_align_in_bits = 8*LLVMABISizeOfType(g->target_data_ref, entry->type_ref);
31873202 entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),
31883203 debug_size_in_bits,
......@@ -3197,7 +3212,7 @@ static void define_builtin_types(CodeGen *g) {
31973212 buf_init_from_str(&entry->name, "f32");
31983213 entry->data.floating.bit_count = 32;
31993214
3200 uint64_t debug_size_in_bits = LLVMSizeOfTypeInBits(g->target_data_ref, entry->type_ref);
3215 uint64_t debug_size_in_bits = 8*LLVMStoreSizeOfType(g->target_data_ref, entry->type_ref);
32013216 uint64_t debug_align_in_bits = 8*LLVMABISizeOfType(g->target_data_ref, entry->type_ref);
32023217 entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),
32033218 debug_size_in_bits,
......@@ -3212,7 +3227,7 @@ static void define_builtin_types(CodeGen *g) {
32123227 buf_init_from_str(&entry->name, "f64");
32133228 entry->data.floating.bit_count = 64;
32143229
3215 uint64_t debug_size_in_bits = LLVMSizeOfTypeInBits(g->target_data_ref, entry->type_ref);
3230 uint64_t debug_size_in_bits = 8*LLVMStoreSizeOfType(g->target_data_ref, entry->type_ref);
32163231 uint64_t debug_align_in_bits = 8*LLVMABISizeOfType(g->target_data_ref, entry->type_ref);
32173232 entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),
32183233 debug_size_in_bits,
......@@ -3227,7 +3242,7 @@ static void define_builtin_types(CodeGen *g) {
32273242 buf_init_from_str(&entry->name, "c_long_double");
32283243 entry->data.floating.bit_count = 80;
32293244
3230 uint64_t debug_size_in_bits = LLVMSizeOfTypeInBits(g->target_data_ref, entry->type_ref);
3245 uint64_t debug_size_in_bits = 8*LLVMStoreSizeOfType(g->target_data_ref, entry->type_ref);
32313246 uint64_t debug_align_in_bits = 8*LLVMABISizeOfType(g->target_data_ref, entry->type_ref);
32323247 entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),
32333248 debug_size_in_bits,
src/parseh.cpp+3-3
......@@ -793,7 +793,7 @@ static void visit_enum_decl(Context *c, const EnumDecl *enum_decl) {
793793
794794 // create debug type for tag
795795 unsigned line = c->source_node ? (c->source_node->line + 1) : 0;
796 uint64_t debug_size_in_bits = LLVMSizeOfTypeInBits(c->codegen->target_data_ref, enum_type->type_ref);
796 uint64_t debug_size_in_bits = 8*LLVMStoreSizeOfType(c->codegen->target_data_ref, enum_type->type_ref);
797797 uint64_t debug_align_in_bits = 8*LLVMABISizeOfType(c->codegen->target_data_ref, enum_type->type_ref);
798798 LLVMZigDIType *tag_di_type = LLVMZigCreateDebugEnumerationType(c->codegen->dbuilder,
799799 LLVMZigFileToScope(c->import->di_file), buf_ptr(bare_name),
......@@ -914,7 +914,7 @@ static TypeTableEntry *resolve_record_decl(Context *c, const RecordDecl *record_
914914 return struct_type;
915915 }
916916
917 uint64_t debug_size_in_bits = LLVMSizeOfTypeInBits(c->codegen->target_data_ref, field_type->type_ref);
917 uint64_t debug_size_in_bits = 8*LLVMStoreSizeOfType(c->codegen->target_data_ref, field_type->type_ref);
918918 uint64_t debug_align_in_bits = 8*LLVMABISizeOfType(c->codegen->target_data_ref, field_type->type_ref);
919919 uint64_t debug_offset_in_bits = 8*LLVMOffsetOfElement(c->codegen->target_data_ref, struct_type->type_ref, i);
920920 di_element_types[i] = LLVMZigCreateDebugMemberType(c->codegen->dbuilder,
......@@ -937,7 +937,7 @@ static TypeTableEntry *resolve_record_decl(Context *c, const RecordDecl *record_
937937
938938 LLVMStructSetBody(struct_type->type_ref, element_types, field_count, false);
939939
940 uint64_t debug_size_in_bits = LLVMSizeOfTypeInBits(c->codegen->target_data_ref, struct_type->type_ref);
940 uint64_t debug_size_in_bits = 8*LLVMStoreSizeOfType(c->codegen->target_data_ref, struct_type->type_ref);
941941 uint64_t debug_align_in_bits = 8*LLVMABISizeOfType(c->codegen->target_data_ref, struct_type->type_ref);
942942 LLVMZigDIType *replacement_di_type = LLVMZigCreateDebugStructType(c->codegen->dbuilder,
943943 LLVMZigFileToScope(c->import->di_file),
src/zig_llvm.cpp+12
......@@ -324,6 +324,18 @@ unsigned LLVMZigEncoding_DW_ATE_float(void) {
324324 return dwarf::DW_ATE_float;
325325}
326326
327unsigned LLVMZigEncoding_DW_ATE_boolean(void) {
328 return dwarf::DW_ATE_boolean;
329}
330
331unsigned LLVMZigEncoding_DW_ATE_unsigned_char(void) {
332 return dwarf::DW_ATE_unsigned_char;
333}
334
335unsigned LLVMZigEncoding_DW_ATE_signed_char(void) {
336 return dwarf::DW_ATE_signed_char;
337}
338
327339unsigned LLVMZigLang_DW_LANG_C99(void) {
328340 return dwarf::DW_LANG_C99;
329341}
src/zig_llvm.hpp+3
......@@ -90,6 +90,9 @@ LLVMZigDIType *LLVMZigCreateSubroutineType(LLVMZigDIBuilder *dibuilder_wrapped,
9090unsigned LLVMZigEncoding_DW_ATE_unsigned(void);
9191unsigned LLVMZigEncoding_DW_ATE_signed(void);
9292unsigned LLVMZigEncoding_DW_ATE_float(void);
93unsigned LLVMZigEncoding_DW_ATE_boolean(void);
94unsigned LLVMZigEncoding_DW_ATE_unsigned_char(void);
95unsigned LLVMZigEncoding_DW_ATE_signed_char(void);
9396unsigned LLVMZigLang_DW_LANG_C99(void);
9497unsigned LLVMZigTag_DW_auto_variable(void);
9598unsigned LLVMZigTag_DW_arg_variable(void);