Skip to content

Commit f1757e3

Browse files
committed
LLVM: be sure to never pass align(0) attribute
This can happen with pointers to zero-bit types. This commit fixes an LLVM assertion being tripped.
1 parent cd8bf12 commit f1757e3

File tree

1 file changed

+7
-2
lines changed

1 file changed

+7
-2
lines changed

src/codegen/llvm.zig

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -768,7 +768,11 @@ pub const Object = struct {
768768
if (ptr_info.@"align" != 0) {
769769
dg.addArgAttrInt(llvm_func, llvm_arg_i, "align", ptr_info.@"align");
770770
} else {
771-
dg.addArgAttrInt(llvm_func, llvm_arg_i, "align", ptr_info.pointee_type.abiAlignment(target));
771+
const elem_align = @maximum(
772+
ptr_info.pointee_type.abiAlignment(target),
773+
1,
774+
);
775+
dg.addArgAttrInt(llvm_func, llvm_arg_i, "align", elem_align);
772776
}
773777
}
774778
}
@@ -840,7 +844,8 @@ pub const Object = struct {
840844
if (ptr_info.@"align" != 0) {
841845
dg.addArgAttrInt(llvm_func, llvm_arg_i, "align", ptr_info.@"align");
842846
} else {
843-
dg.addArgAttrInt(llvm_func, llvm_arg_i, "align", ptr_info.pointee_type.abiAlignment(target));
847+
const elem_align = @maximum(ptr_info.pointee_type.abiAlignment(target), 1);
848+
dg.addArgAttrInt(llvm_func, llvm_arg_i, "align", elem_align);
844849
}
845850
const ptr_param = llvm_func.getParam(llvm_arg_i);
846851
llvm_arg_i += 1;

0 commit comments

Comments
 (0)