authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-08-08 13:07:05-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-08-08 13:07:05-04:00
log8be95af48011f71f1902dff4ffbf5ea95cf1bcf4
tree699f358122478afdfeabd613dc6734f5dd2ff2ac
parent8d4cb852856631543aa961a6149b9a22021a1573
signaturelock-open Commit is signed but in an unrecognized format.

add compile error for unable to determine async fn frame


2 files changed, 12 insertions(+), 0 deletions(-)

BRANCH_TODO+5
......@@ -31,3 +31,8 @@
3131 * grep for "coroutine" and "coro" and replace all that nomenclature with "async functions"
3232 * when there are multiple calls to async functions in a function, reuse the same frame buffer, so that the
3333 needed bytes is equal to the largest callee's frame
34 * if an async function is never called with async then a few optimizations can be made:
35 - the return does not need to be atomic
36 - it can be assumed that these are always available: the awaiter ptr, return ptr if applicable,
37 error return trace ptr if applicable.
38 - it can be assumed that it is never cancelled
src/analyze.cpp+7
......@@ -5198,6 +5198,13 @@ static Error resolve_coro_frame(CodeGen *g, ZigType *frame_type) {
51985198 if (callee->body_node == nullptr) {
51995199 continue;
52005200 }
5201 if (callee->anal_state == FnAnalStateProbing) {
5202 ErrorMsg *msg = add_node_error(g, fn->proto_node,
5203 buf_sprintf("unable to determine async function frame of '%s'", buf_ptr(&fn->symbol_name)));
5204 add_error_note(g, msg, call->base.source_node,
5205 buf_sprintf("analysis of function '%s' depends on the frame", buf_ptr(&callee->symbol_name)));
5206 return ErrorSemanticAnalyzeFail;
5207 }
52015208
52025209 analyze_fn_body(g, callee);
52035210 if (callee->anal_state == FnAnalStateInvalid) {