aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/analyze.cpp6
-rw-r--r--test/compile_errors.zig12
2 files changed, 17 insertions, 1 deletions
diff --git a/src/analyze.cpp b/src/analyze.cpp
index 5af9698dd1..5eb70d6717 100644
--- a/src/analyze.cpp
+++ b/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) {
diff --git a/test/compile_errors.zig b/test/compile_errors.zig
index 4b1a24c675..3245632e37 100644
--- a/test/compile_errors.zig
+++ b/test/compile_errors.zig
@@ -3,6 +3,18 @@ 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 {
\\ var ptr = afunc;