aboutsummaryrefslogtreecommitdiff
path: root/src/codegen/llvm.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2022-06-30 16:32:03 -0700
committerAndrew Kelley <andrew@ziglang.org>2022-06-30 18:33:02 -0700
commitd3542be875704bffc931970948345d1a44e25b8e (patch)
tree1e1789e2571c4ce2a7db2ce1a5a946d4579a77db /src/codegen/llvm.zig
parentc030ec1884ad7c553d6680944b47a1fc7653586f (diff)
downloadzig-d3542be875704bffc931970948345d1a44e25b8e.tar.gz
zig-d3542be875704bffc931970948345d1a44e25b8e.zip
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.
Diffstat (limited to 'src/codegen/llvm.zig')
-rw-r--r--src/codegen/llvm.zig9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig
index 45a90c81e5..c3194ccda1 100644
--- a/src/codegen/llvm.zig
+++ b/src/codegen/llvm.zig
@@ -768,7 +768,11 @@ pub const Object = struct {
if (ptr_info.@"align" != 0) {
dg.addArgAttrInt(llvm_func, llvm_arg_i, "align", ptr_info.@"align");
} else {
- dg.addArgAttrInt(llvm_func, llvm_arg_i, "align", ptr_info.pointee_type.abiAlignment(target));
+ const elem_align = @maximum(
+ ptr_info.pointee_type.abiAlignment(target),
+ 1,
+ );
+ dg.addArgAttrInt(llvm_func, llvm_arg_i, "align", elem_align);
}
}
}
@@ -840,7 +844,8 @@ pub const Object = struct {
if (ptr_info.@"align" != 0) {
dg.addArgAttrInt(llvm_func, llvm_arg_i, "align", ptr_info.@"align");
} else {
- dg.addArgAttrInt(llvm_func, llvm_arg_i, "align", ptr_info.pointee_type.abiAlignment(target));
+ const elem_align = @maximum(ptr_info.pointee_type.abiAlignment(target), 1);
+ dg.addArgAttrInt(llvm_func, llvm_arg_i, "align", elem_align);
}
const ptr_param = llvm_func.getParam(llvm_arg_i);
llvm_arg_i += 1;