diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2022-06-30 16:32:03 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2022-06-30 18:33:02 -0700 |
| commit | d3542be875704bffc931970948345d1a44e25b8e (patch) | |
| tree | 1e1789e2571c4ce2a7db2ce1a5a946d4579a77db /src/codegen/llvm.zig | |
| parent | c030ec1884ad7c553d6680944b47a1fc7653586f (diff) | |
| download | zig-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.zig | 9 |
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; |
