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) {...@@ -9368,7 +9368,7 @@ static void resolve_llvm_types_integer(CodeGen *g, ZigType *type) {
9368 }9368 }
93699369
9370 type->llvm_di_type = ZigLLVMCreateDebugBasicType(g->dbuilder, buf_ptr(&type->name),9370 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);
9372 type->llvm_type = LLVMIntType(type->size_in_bits);9372 type->llvm_type = LLVMIntType(type->size_in_bits);
9373}9373}
93749374
...@@ -9932,9 +9932,14 @@ static void resolve_llvm_types(CodeGen *g, ZigType *type, ResolveStatus wanted_r...@@ -9932,9 +9932,14 @@ static void resolve_llvm_types(CodeGen *g, ZigType *type, ResolveStatus wanted_r
9932 case ZigTypeIdVector: {9932 case ZigTypeIdVector: {
9933 if (type->llvm_di_type != nullptr) return;9933 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);9935 type->llvm_type = LLVMVectorType(get_llvm_type(g, type->data.vector.elem_type),
9936 type->llvm_di_type = ZigLLVMDIBuilderCreateVectorType(g->dbuilder, 8 * type->abi_size,9936 type->data.vector.len);
9937 type->abi_align, get_llvm_di_type(g, type->data.vector.elem_type), 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);
9938 return;9943 return;
9939 }9944 }
9940 case ZigTypeIdFnFrame:9945 case ZigTypeIdFnFrame:
src/stage1/codegen.cpp+2-3
...@@ -9514,7 +9514,7 @@ static void define_builtin_types(CodeGen *g) {...@@ -9514,7 +9514,7 @@ static void define_builtin_types(CodeGen *g) {
9514 buf_init_from_str(&entry->name, info->name);9514 buf_init_from_str(&entry->name, info->name);
95159515
9516 entry->llvm_di_type = ZigLLVMCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),9516 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,
9518 is_signed ? ZigLLVMEncoding_DW_ATE_signed() : ZigLLVMEncoding_DW_ATE_unsigned());9518 is_signed ? ZigLLVMEncoding_DW_ATE_signed() : ZigLLVMEncoding_DW_ATE_unsigned());
9519 entry->data.integral.is_signed = is_signed;9519 entry->data.integral.is_signed = is_signed;
9520 entry->data.integral.bit_count = size_in_bits;9520 entry->data.integral.bit_count = size_in_bits;
...@@ -9531,8 +9531,7 @@ static void define_builtin_types(CodeGen *g) {...@@ -9531,8 +9531,7 @@ static void define_builtin_types(CodeGen *g) {
9531 entry->abi_align = LLVMABIAlignmentOfType(g->target_data_ref, entry->llvm_type);9531 entry->abi_align = LLVMABIAlignmentOfType(g->target_data_ref, entry->llvm_type);
9532 buf_init_from_str(&entry->name, "bool");9532 buf_init_from_str(&entry->name, "bool");
9533 entry->llvm_di_type = ZigLLVMCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),9533 entry->llvm_di_type = ZigLLVMCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),
9534 8*LLVMStoreSizeOfType(g->target_data_ref, entry->llvm_type),9534 1, ZigLLVMEncoding_DW_ATE_boolean());
9535 ZigLLVMEncoding_DW_ATE_boolean());
9536 g->builtin_types.entry_bool = entry;9535 g->builtin_types.entry_bool = entry;
9537 g->primitive_type_table.put(&entry->name, entry);9536 g->primitive_type_table.put(&entry->name, entry);
9538 }9537 }