zig

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

commit 9d8cdb855bd20f20d00618e8bc78dcf237232537 (tree)
parent db5562deb0fe193aced9498c05ccf786ca98ba05
Author: Jacob Young <jacobly0@users.noreply.github.com>
Date:   Sat,  1 Oct 2022 11:38:33 -0400

Sema: fix function paramater count mismatch note

expected type 'fn() void', found 'fn(i32) void'
function with 0 parameters cannot cast into a function with 0 parameters
  =>
expected type 'fn() void', found 'fn(i32) void'
function with 1 parameters cannot cast into a function with 0 parameters

Diffstat:
Msrc/Sema.zig | 2+-
Atest/cases/compile_errors/function_type_coercion.zig | 21+++++++++++++++++++++
2 files changed, 22 insertions(+), 1 deletion(-)

diff --git a/src/Sema.zig b/src/Sema.zig @@ -24312,7 +24312,7 @@ fn coerceInMemoryAllowedFns( if (dest_info.param_types.len != src_info.param_types.len) { return InMemoryCoercionResult{ .fn_param_count = .{ - .actual = dest_info.param_types.len, + .actual = src_info.param_types.len, .wanted = dest_info.param_types.len, } }; } diff --git a/test/cases/compile_errors/function_type_coercion.zig b/test/cases/compile_errors/function_type_coercion.zig @@ -0,0 +1,21 @@ +fn f(_: i32) void {} +export fn wrong_param_count() void { + _ = @as(fn () void, f); +} +export fn wrong_param_type() void { + _ = @as(fn (f32) void, f); +} +export fn wrong_return_type() void { + _ = @as(fn () i32, f); +} + +// error +// backend=stage2,llvm +// target=native +// +// :3:25: error: expected type 'fn() void', found 'fn(i32) void' +// :3:25: note: function with 1 parameters cannot cast into a function with 0 parameters +// :6:28: error: expected type 'fn(f32) void', found 'fn(i32) void' +// :6:28: note: parameter 0 'i32' cannot cast into 'f32' +// :9:24: error: expected type 'fn() i32', found 'fn(i32) void' +// :9:24: note: return type 'void' cannot cast into return type 'i32'