authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-07-03 21:08:47-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-07-03 21:08:47-07:00
logfdc24e66084c40cfbdb6ed459799f77ea405c4ac
treefb13690c2e7bc80942193f1ac51ad1f795dd4fe9
parent15bdba410a37464f588f0ec1ddde2dfeb9694c16

stage1: fix vectors of small int and bool tripping LLVM assertion

stage2 already has this fixed; debug info is given size in bits rather than ABI size (bytes) multiplied by 8. closes #11587

2 files changed, 11 insertions(+), 7 deletions(-)

src/stage1/analyze.cpp+9-4
......@@ -9368,7 +9368,7 @@ static void resolve_llvm_types_integer(CodeGen *g, ZigType *type) {
93689368 }
93699369
93709370 type->llvm_di_type = ZigLLVMCreateDebugBasicType(g->dbuilder, buf_ptr(&type->name),
9371 type->abi_size * 8, dwarf_tag);
9371 type->size_in_bits, dwarf_tag);
93729372 type->llvm_type = LLVMIntType(type->size_in_bits);
93739373}
93749374
......@@ -9932,9 +9932,14 @@ static void resolve_llvm_types(CodeGen *g, ZigType *type, ResolveStatus wanted_r
99329932 case ZigTypeIdVector: {
99339933 if (type->llvm_di_type != nullptr) return;
99349934
9935 type->llvm_type = LLVMVectorType(get_llvm_type(g, type->data.vector.elem_type), type->data.vector.len);
9936 type->llvm_di_type = ZigLLVMDIBuilderCreateVectorType(g->dbuilder, 8 * type->abi_size,
9937 type->abi_align, get_llvm_di_type(g, type->data.vector.elem_type), type->data.vector.len);
9935 type->llvm_type = LLVMVectorType(get_llvm_type(g, type->data.vector.elem_type),
9936 type->data.vector.len);
9937
9938 type->llvm_di_type = ZigLLVMDIBuilderCreateVectorType(g->dbuilder,
9939 8 * type->abi_size,
9940 8 * type->abi_align,
9941 get_llvm_di_type(g, type->data.vector.elem_type),
9942 type->data.vector.len);
99389943 return;
99399944 }
99409945 case ZigTypeIdFnFrame:
src/stage1/codegen.cpp+2-3
......@@ -9514,7 +9514,7 @@ static void define_builtin_types(CodeGen *g) {
95149514 buf_init_from_str(&entry->name, info->name);
95159515
95169516 entry->llvm_di_type = ZigLLVMCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),
9517 8*LLVMStoreSizeOfType(g->target_data_ref, entry->llvm_type),
9517 size_in_bits,
95189518 is_signed ? ZigLLVMEncoding_DW_ATE_signed() : ZigLLVMEncoding_DW_ATE_unsigned());
95199519 entry->data.integral.is_signed = is_signed;
95209520 entry->data.integral.bit_count = size_in_bits;
......@@ -9531,8 +9531,7 @@ static void define_builtin_types(CodeGen *g) {
95319531 entry->abi_align = LLVMABIAlignmentOfType(g->target_data_ref, entry->llvm_type);
95329532 buf_init_from_str(&entry->name, "bool");
95339533 entry->llvm_di_type = ZigLLVMCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),
9534 8*LLVMStoreSizeOfType(g->target_data_ref, entry->llvm_type),
9535 ZigLLVMEncoding_DW_ATE_boolean());
9534 1, ZigLLVMEncoding_DW_ATE_boolean());
95369535 g->builtin_types.entry_bool = entry;
95379536 g->primitive_type_table.put(&entry->name, entry);
95389537 }