Skip to content

Commit fdc24e6

Browse files
committed
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
1 parent 15bdba4 commit fdc24e6

File tree

2 files changed

+11
-7
lines changed

2 files changed

+11
-7
lines changed

src/stage1/analyze.cpp

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}

0 commit comments

Comments
 (0)