authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-06-30 16:32:03-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-06-30 18:33:02-07:00
logd3542be875704bffc931970948345d1a44e25b8e
tree1e1789e2571c4ce2a7db2ce1a5a946d4579a77db
parentc030ec1884ad7c553d6680944b47a1fc7653586f

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 files changed, 7 insertions(+), 2 deletions(-)

src/codegen/llvm.zig+7-2
......@@ -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;