From 4e357151a54c9a2f373cef59e2718a61cfbe3658 Mon Sep 17 00:00:00 2001 From: William Sengir Date: Sun, 20 Mar 2022 00:00:13 -0700 Subject: stage2: align store for vector-to-array bitcast in LLVM backend This was causing a very rare segfault when LLVM would emit `vmovdqa` using an unaligned memory operand on the stack. --- src/codegen/llvm.zig | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig index 13f4f7d01b..107b059765 100644 --- a/src/codegen/llvm.zig +++ b/src/codegen/llvm.zig @@ -5563,7 +5563,8 @@ pub const FuncGen = struct { if (bitcast_ok) { const llvm_vector_ty = try self.dg.llvmType(operand_ty); const casted_ptr = self.builder.buildBitCast(array_ptr, llvm_vector_ty.pointerType(0), ""); - _ = self.builder.buildStore(operand, casted_ptr); + const llvm_store = self.builder.buildStore(operand, casted_ptr); + llvm_store.setAlignment(inst_ty.abiAlignment(target)); } else { // If the ABI size of the element type is not evenly divisible by size in bits; // a simple bitcast will not work, and we fall back to extractelement. -- cgit v1.2.3