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 {...@@ -768,7 +768,11 @@ pub const Object = struct {
768 if (ptr_info.@"align" != 0) {768 if (ptr_info.@"align" != 0) {
769 dg.addArgAttrInt(llvm_func, llvm_arg_i, "align", ptr_info.@"align");769 dg.addArgAttrInt(llvm_func, llvm_arg_i, "align", ptr_info.@"align");
770 } else {770 } 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);
772 }776 }
773 }777 }
774 }778 }
...@@ -840,7 +844,8 @@ pub const Object = struct {...@@ -840,7 +844,8 @@ pub const Object = struct {
840 if (ptr_info.@"align" != 0) {844 if (ptr_info.@"align" != 0) {
841 dg.addArgAttrInt(llvm_func, llvm_arg_i, "align", ptr_info.@"align");845 dg.addArgAttrInt(llvm_func, llvm_arg_i, "align", ptr_info.@"align");
842 } else {846 } 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);
844 }849 }
845 const ptr_param = llvm_func.getParam(llvm_arg_i);850 const ptr_param = llvm_func.getParam(llvm_arg_i);
846 llvm_arg_i += 1;851 llvm_arg_i += 1;