Commit fdc24e6608

Andrew Kelley <andrew@ziglang.org>
2022-07-04 06:08:47
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
Changed files (2)
src/stage1/analyze.cpp
@@ -9368,7 +9368,7 @@ static void resolve_llvm_types_integer(CodeGen *g, ZigType *type) {
     }
 
     type->llvm_di_type = ZigLLVMCreateDebugBasicType(g->dbuilder, buf_ptr(&type->name),
-            type->abi_size * 8, dwarf_tag);
+            type->size_in_bits, dwarf_tag);
     type->llvm_type = LLVMIntType(type->size_in_bits);
 }
 
@@ -9932,9 +9932,14 @@ static void resolve_llvm_types(CodeGen *g, ZigType *type, ResolveStatus wanted_r
         case ZigTypeIdVector: {
             if (type->llvm_di_type != nullptr) return;
 
-            type->llvm_type = LLVMVectorType(get_llvm_type(g, type->data.vector.elem_type), type->data.vector.len);
-            type->llvm_di_type = ZigLLVMDIBuilderCreateVectorType(g->dbuilder, 8 * type->abi_size,
-                    type->abi_align, get_llvm_di_type(g, type->data.vector.elem_type), type->data.vector.len);
+            type->llvm_type = LLVMVectorType(get_llvm_type(g, type->data.vector.elem_type),
+                    type->data.vector.len);
+
+            type->llvm_di_type = ZigLLVMDIBuilderCreateVectorType(g->dbuilder,
+                    8 * type->abi_size,
+                    8 * type->abi_align,
+                    get_llvm_di_type(g, type->data.vector.elem_type),
+                    type->data.vector.len);
             return;
         }
         case ZigTypeIdFnFrame:
src/stage1/codegen.cpp
@@ -9514,7 +9514,7 @@ static void define_builtin_types(CodeGen *g) {
         buf_init_from_str(&entry->name, info->name);
 
         entry->llvm_di_type = ZigLLVMCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),
-                8*LLVMStoreSizeOfType(g->target_data_ref, entry->llvm_type),
+                size_in_bits,
                 is_signed ? ZigLLVMEncoding_DW_ATE_signed() : ZigLLVMEncoding_DW_ATE_unsigned());
         entry->data.integral.is_signed = is_signed;
         entry->data.integral.bit_count = size_in_bits;
@@ -9531,8 +9531,7 @@ static void define_builtin_types(CodeGen *g) {
         entry->abi_align = LLVMABIAlignmentOfType(g->target_data_ref, entry->llvm_type);
         buf_init_from_str(&entry->name, "bool");
         entry->llvm_di_type = ZigLLVMCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),
-                8*LLVMStoreSizeOfType(g->target_data_ref, entry->llvm_type),
-                ZigLLVMEncoding_DW_ATE_boolean());
+                1, ZigLLVMEncoding_DW_ATE_boolean());
         g->builtin_types.entry_bool = entry;
         g->primitive_type_table.put(&entry->name, entry);
     }