diff options
| author | Tadeo Kondrak <me@tadeo.ca> | 2021-02-12 13:40:44 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-02-12 15:40:44 -0500 |
| commit | 9270aae071a4ee840193afe1162b24945cbd6d9e (patch) | |
| tree | dcdd56b0aa3517beac92a05776132dbee6462c1d /src/codegen.zig | |
| parent | d3565ed6b48c9c66128f181e7b90b5348504cb3f (diff) | |
| download | zig-9270aae071a4ee840193afe1162b24945cbd6d9e.tar.gz zig-9270aae071a4ee840193afe1162b24945cbd6d9e.zip | |
stage2: fix zero-sized function parameters (#7998)
Diffstat (limited to 'src/codegen.zig')
| -rw-r--r-- | src/codegen.zig | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/src/codegen.zig b/src/codegen.zig index 9771386403..d81ad1faf5 100644 --- a/src/codegen.zig +++ b/src/codegen.zig @@ -3705,17 +3705,22 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type { for (param_types) |ty, i| { switch (ty.zigTypeTag()) { .Bool, .Int => { - const param_size = @intCast(u32, ty.abiSize(self.target.*)); - if (next_int_reg >= c_abi_int_param_regs.len) { - result.args[i] = .{ .stack_offset = next_stack_offset }; - next_stack_offset += param_size; + if (!ty.hasCodeGenBits()) { + assert(cc != .C); + result.args[i] = .{ .none = {} }; } else { - const aliased_reg = registerAlias( - c_abi_int_param_regs[next_int_reg], - param_size, - ); - result.args[i] = .{ .register = aliased_reg }; - next_int_reg += 1; + const param_size = @intCast(u32, ty.abiSize(self.target.*)); + if (next_int_reg >= c_abi_int_param_regs.len) { + result.args[i] = .{ .stack_offset = next_stack_offset }; + next_stack_offset += param_size; + } else { + const aliased_reg = registerAlias( + c_abi_int_param_regs[next_int_reg], + param_size, + ); + result.args[i] = .{ .register = aliased_reg }; + next_int_reg += 1; + } } }, else => return self.fail(src, "TODO implement function parameters of type {s}", .{@tagName(ty.zigTypeTag())}), |
