commit 93f8110e5d9ca7e3ac81b33edd38709fac2c6acd (tree)
parent c0cfbe98f3069d1aabb29fb0e795c6582e88b75e
Author: Mathieu Guay-Paquet <mathieu.guaypaquet@gmail.com>
Date: Tue, 16 Feb 2021 23:43:36 -0500
Allow async in nosuspend scope
Starting an async function call is actually a synchronous operation,
since the caller is not awaiting on the callee for a return value.
This commit removes the compiler code which generates the error and
updates the relevant test case.
In the presence of CallModifierAsync, the callee is expected to
suspend, so it should not be changed to CallModifierNoSuspend.
Diffstat:
2 files changed, 1 insertion(+), 7 deletions(-)
diff --git a/src/stage1/ir.cpp b/src/stage1/ir.cpp
@@ -7607,12 +7607,7 @@ static IrInstSrc *ir_gen_fn_call(IrBuilderSrc *irb, Scope *scope, AstNode *node,
bool is_nosuspend = get_scope_nosuspend(scope) != nullptr;
CallModifier modifier = node->data.fn_call_expr.modifier;
- if (is_nosuspend) {
- if (modifier == CallModifierAsync) {
- add_node_error(irb->codegen, node,
- buf_sprintf("async call in nosuspend scope"));
- return irb->codegen->invalid_inst_src;
- }
+ if (is_nosuspend && modifier != CallModifierAsync) {
modifier = CallModifierNoSuspend;
}
diff --git a/test/compile_errors.zig b/test/compile_errors.zig
@@ -1027,7 +1027,6 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
\\}
\\fn foo() void {}
, &[_][]const u8{
- "tmp.zig:3:21: error: async call in nosuspend scope",
"tmp.zig:4:9: error: suspend in nosuspend scope",
});