Commit 9fa35adbd4

Andrew Kelley <superjoe30@gmail.com>
2018-02-14 22:24:43
fix sometimes not type checking function parameters
closes #774 regression introduced in cfb2c676925d77887e46631dcafa783e6c65e61d
1 parent 629f134
Changed files (2)
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<ConstCastOnly>(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;
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);