aboutsummaryrefslogtreecommitdiff
path: root/src/codegen.zig
diff options
context:
space:
mode:
authorTadeo Kondrak <me@tadeo.ca>2021-02-12 13:40:44 -0700
committerGitHub <noreply@github.com>2021-02-12 15:40:44 -0500
commit9270aae071a4ee840193afe1162b24945cbd6d9e (patch)
treedcdd56b0aa3517beac92a05776132dbee6462c1d /src/codegen.zig
parentd3565ed6b48c9c66128f181e7b90b5348504cb3f (diff)
downloadzig-9270aae071a4ee840193afe1162b24945cbd6d9e.tar.gz
zig-9270aae071a4ee840193afe1162b24945cbd6d9e.zip
stage2: fix zero-sized function parameters (#7998)
Diffstat (limited to 'src/codegen.zig')
-rw-r--r--src/codegen.zig25
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())}),