authorgravatar for sinon@vortan.devDavid Rubin <sinon@vortan.dev> 2026-06-09 17:24:16-07:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-06-10 14:02:14+02:00
log0f87031cdaf2a05c6d45c99b4b549db49803ffca
tree5d47a782390b0a1758fd7200328a576a318dff5a
parent431092fa612ca193cff56fd3430ac037ff70102b

Sema: correctly compare callconv stack alignment


2 files changed, 11 insertions(+), 1 deletions(-)

src/Sema.zig+1-1
...@@ -29126,7 +29126,7 @@ fn callconvCoerceAllowed(...@@ -29126,7 +29126,7 @@ fn callconvCoerceAllowed(
29126 if (@TypeOf(src_data) != void) {29126 if (@TypeOf(src_data) != void) {
29127 const default_stack_align = target.stackAlignment();29127 const default_stack_align = target.stackAlignment();
29128 const src_stack_align = src_data.incoming_stack_alignment orelse default_stack_align;29128 const src_stack_align = src_data.incoming_stack_alignment orelse default_stack_align;
29129 const dest_stack_align = src_data.incoming_stack_alignment orelse default_stack_align;29129 const dest_stack_align = dest_data.incoming_stack_alignment orelse default_stack_align;
29130 if (dest_stack_align < src_stack_align) return false;29130 if (dest_stack_align < src_stack_align) return false;
29131 }29131 }
29132 switch (@TypeOf(src_data)) {29132 switch (@TypeOf(src_data)) {
test/cases/compile_errors/callconv_stack_alignment_coerce.zig created+10
...@@ -0,0 +1,10 @@
1fn foo() callconv(.{ .x86_64_sysv = .{ .incoming_stack_alignment = 32 } }) void {}
2const Bar = *const fn () callconv(.{ .x86_64_sysv = .{ .incoming_stack_alignment = 16 } }) void;
3export var p: Bar = &foo;
4
5// error
6// target=x86_64-linux-none
7//
8// :3:21: error: expected type '*const fn () callconv(.{ .x86_64_sysv = .{ .incoming_stack_alignment = 16 } }) void', found '*const fn () callconv(.{ .x86_64_sysv = .{ .incoming_stack_alignment = 32 } }) void'
9// :3:21: note: pointer type child 'fn () callconv(.{ .x86_64_sysv = .{ .incoming_stack_alignment = 32 } }) void' cannot cast into pointer type child 'fn () callconv(.{ .x86_64_sysv = .{ .incoming_stack_alignment = 16 } }) void'
10// :3:21: note: calling convention 'x86_64_sysv' cannot cast into calling convention 'x86_64_sysv'