aboutsummaryrefslogtreecommitdiff
path: root/src/Sema.zig
diff options
context:
space:
mode:
authormlugg <mlugg@mlugg.co.uk>2024-10-17 09:09:35 +0100
committermlugg <mlugg@mlugg.co.uk>2024-10-19 19:46:07 +0100
commit8d5ac6bdeaef032b2beaeea4bfa4a5bfac9b8263 (patch)
tree1a2192b257026c9af4059436e31f68bbb0d5b47e /src/Sema.zig
parent73f4c680054a1a4e067f0719676f61f175d81a13 (diff)
downloadzig-8d5ac6bdeaef032b2beaeea4bfa4a5bfac9b8263.tar.gz
zig-8d5ac6bdeaef032b2beaeea4bfa4a5bfac9b8263.zip
Sema: add and improve some callconv compile errors
Diffstat (limited to 'src/Sema.zig')
-rw-r--r--src/Sema.zig18
1 files changed, 15 insertions, 3 deletions
diff --git a/src/Sema.zig b/src/Sema.zig
index 1957b94b5c..00448c47ca 100644
--- a/src/Sema.zig
+++ b/src/Sema.zig
@@ -10195,6 +10195,18 @@ fn finishFunc(
return sema.failWithOwnedErrorMsg(block, msg);
}
+ validate_incoming_stack_align: {
+ const a: u64 = switch (cc_resolved) {
+ inline else => |payload| if (@TypeOf(payload) != void and @hasField(@TypeOf(payload), "incoming_stack_alignment"))
+ payload.incoming_stack_alignment orelse break :validate_incoming_stack_align
+ else
+ break :validate_incoming_stack_align,
+ };
+ if (!std.math.isPowerOfTwo(a)) {
+ return sema.fail(block, cc_src, "calling convention incoming stack alignment '{d}' is not a power of two", .{a});
+ }
+ }
+
switch (cc_resolved) {
.x86_64_interrupt,
.x86_interrupt,
@@ -10211,7 +10223,7 @@ fn finishFunc(
return sema.fail(block, ret_ty_src, "function with calling convention '{s}' must return 'void' or 'noreturn'", .{@tagName(cc_resolved)});
},
.@"inline" => if (is_noinline) {
- return sema.fail(block, cc_src, "'noinline' function cannot have callconv 'inline'", .{});
+ return sema.fail(block, cc_src, "'noinline' function cannot have calling convention 'inline'", .{});
},
else => {},
}
@@ -10231,12 +10243,12 @@ fn finishFunc(
}
}
};
- return sema.fail(block, cc_src, "callconv '{s}' only available on architectures {}", .{
+ return sema.fail(block, cc_src, "calling convention '{s}' only available on architectures {}", .{
@tagName(cc_resolved),
ArchListFormatter{ .archs = allowed_archs },
});
},
- .bad_backend => |bad_backend| return sema.fail(block, cc_src, "callconv '{s}' not supported by compiler backend '{s}'", .{
+ .bad_backend => |bad_backend| return sema.fail(block, cc_src, "calling convention '{s}' not supported by compiler backend '{s}'", .{
@tagName(cc_resolved),
@tagName(bad_backend),
}),