diff options
| author | mlugg <mlugg@mlugg.co.uk> | 2024-10-17 09:09:35 +0100 |
|---|---|---|
| committer | mlugg <mlugg@mlugg.co.uk> | 2024-10-19 19:46:07 +0100 |
| commit | 8d5ac6bdeaef032b2beaeea4bfa4a5bfac9b8263 (patch) | |
| tree | 1a2192b257026c9af4059436e31f68bbb0d5b47e /src/Sema.zig | |
| parent | 73f4c680054a1a4e067f0719676f61f175d81a13 (diff) | |
| download | zig-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.zig | 18 |
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), }), |
