Commit c879209661

Andrew Kelley <andrew@ziglang.org>
2019-08-03 08:40:38
add compile error for calling async function pointer
1 parent e444e73
Changed files (2)
src/analyze.cpp
@@ -5177,7 +5177,11 @@ static Error resolve_coro_frame(CodeGen *g, ZigType *frame_type) {
     for (size_t i = 0; i < fn->call_list.length; i += 1) {
         IrInstructionCallGen *call = fn->call_list.at(i);
         ZigFn *callee = call->fn_entry;
-        assert(callee != nullptr);
+        if (callee == nullptr) {
+            add_node_error(g, call->base.source_node,
+                buf_sprintf("function is not comptime-known; @asyncCall required"));
+            return ErrorSemanticAnalyzeFail;
+        }
 
         analyze_fn_body(g, callee);
         if (callee->anal_state == FnAnalStateInvalid) {
test/compile_errors.zig
@@ -2,6 +2,18 @@ const tests = @import("tests.zig");
 const builtin = @import("builtin");
 
 pub fn addCases(cases: *tests.CompileErrorContext) void {
+    cases.add(
+        "runtime-known async function called",
+        \\export fn entry() void {
+        \\    var ptr = afunc;
+        \\    _ = ptr();
+        \\}
+        \\
+        \\async fn afunc() void {}
+    ,
+        "tmp.zig:3:12: error: function is not comptime-known; @asyncCall required",
+    );
+
     cases.add(
         "runtime-known function called with async keyword",
         \\export fn entry() void {