commit 0f87031cdaf2a05c6d45c99b4b549db49803ffca (tree) parent 431092fa612ca193cff56fd3430ac037ff70102b Author: David Rubin <sinon@vortan.dev> Date: Tue, 9 Jun 2026 17:24:16 -0700 Sema: correctly compare callconv stack alignment Diffstat:
| M | src/Sema.zig | | | 2 | +- |
| A | test/cases/compile_errors/callconv_stack_alignment_coerce.zig | | | 10 | ++++++++++ |
2 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/src/Sema.zig b/src/Sema.zig @@ -29126,7 +29126,7 @@ fn callconvCoerceAllowed( if (@TypeOf(src_data) != void) { const default_stack_align = target.stackAlignment(); const src_stack_align = src_data.incoming_stack_alignment orelse default_stack_align; - const dest_stack_align = src_data.incoming_stack_alignment orelse default_stack_align; + const dest_stack_align = dest_data.incoming_stack_alignment orelse default_stack_align; if (dest_stack_align < src_stack_align) return false; } switch (@TypeOf(src_data)) { diff --git a/test/cases/compile_errors/callconv_stack_alignment_coerce.zig b/test/cases/compile_errors/callconv_stack_alignment_coerce.zig @@ -0,0 +1,10 @@ +fn foo() callconv(.{ .x86_64_sysv = .{ .incoming_stack_alignment = 32 } }) void {} +const Bar = *const fn () callconv(.{ .x86_64_sysv = .{ .incoming_stack_alignment = 16 } }) void; +export var p: Bar = &foo; + +// error +// target=x86_64-linux-none +// +// :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' +// :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' +// :3:21: note: calling convention 'x86_64_sysv' cannot cast into calling convention 'x86_64_sysv'