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.
This commit is contained in:
Andrew Kelley 2022-06-30 16:32:03 -07:00
parent c030ec1884
commit d3542be875

View File

@ -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;