diff --git a/src/ir.cpp b/src/ir.cpp index 2bb40c7e15..8f6317096c 100644 --- a/src/ir.cpp +++ b/src/ir.cpp @@ -6727,8 +6727,8 @@ static ConstCastOnly types_match_const_cast_only(IrAnalyze *ira, TypeTableEntry result.id = ConstCastResultIdFnReturnType; result.data.return_type = allocate_nonzero(1); *result.data.return_type = child; + return result; } - return result; } if (expected_type->data.fn.fn_type_id.param_count != actual_type->data.fn.fn_type_id.param_count) { result.id = ConstCastResultIdFnArgCount; diff --git a/test/compile_errors.zig b/test/compile_errors.zig index f60705aa31..90b3ff023a 100644 --- a/test/compile_errors.zig +++ b/test/compile_errors.zig @@ -1,6 +1,19 @@ const tests = @import("tests.zig"); pub fn addCases(cases: &tests.CompileErrorContext) void { + cases.add("type checking function pointers", + \\fn a(b: fn (&const u8) void) void { + \\ b('a'); + \\} + \\fn c(d: u8) void { + \\ @import("std").debug.warn("{c}\n", d); + \\} + \\export fn entry() void { + \\ a(c); + \\} + , + ".tmp_source.zig:8:7: error: expected type 'fn(&const u8) void', found 'fn(u8) void'"); + cases.add("no else prong on switch on global error set", \\export fn entry() void { \\ foo(error.A);