zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

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:
Msrc/Sema.zig | 2+-
Atest/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'