authorgravatar for william@sengir.comWilliam Sengir <william@sengir.com> 2022-03-20 00:00:13-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-03-21 16:54:19-07:00
log4e357151a54c9a2f373cef59e2718a61cfbe3658
tree9416550e7b7f086bab7648063814dc91e6bacbed
parent961248cde32e0d572225c6c1d367b960540ae220

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.

1 files changed, 2 insertions(+), 1 deletions(-)

src/codegen/llvm.zig+2-1
......@@ -5563,7 +5563,8 @@ pub const FuncGen = struct {
55635563 if (bitcast_ok) {
55645564 const llvm_vector_ty = try self.dg.llvmType(operand_ty);
55655565 const casted_ptr = self.builder.buildBitCast(array_ptr, llvm_vector_ty.pointerType(0), "");
5566 _ = self.builder.buildStore(operand, casted_ptr);
5566 const llvm_store = self.builder.buildStore(operand, casted_ptr);
5567 llvm_store.setAlignment(inst_ty.abiAlignment(target));
55675568 } else {
55685569 // If the ABI size of the element type is not evenly divisible by size in bits;
55695570 // a simple bitcast will not work, and we fall back to extractelement.