Commit c0cfbe98f3

Mathieu Guay-Paquet <mathieu.guaypaquet@gmail.com>
2021-02-17 03:51:19
Allow resume in nosuspend scope
Resuming a suspended async function call is actually a synchronous operation. This commit removes the compiler code which generates the error and updates the relevant test case.
1 parent 9270aae
Changed files (2)
src
stage1
test
src/stage1/ir.cpp
@@ -10095,10 +10095,6 @@ static IrInstSrc *ir_gen_fn_proto(IrBuilderSrc *irb, Scope *parent_scope, AstNod
 
 static IrInstSrc *ir_gen_resume(IrBuilderSrc *irb, Scope *scope, AstNode *node) {
     assert(node->type == NodeTypeResume);
-    if (get_scope_nosuspend(scope) != nullptr) {
-        add_node_error(irb->codegen, node, buf_sprintf("resume in nosuspend scope"));
-        return irb->codegen->invalid_inst_src;
-    }
 
     IrInstSrc *target_inst = ir_gen_node_extra(irb, node->data.resume_expr.expr, scope, LValPtr, nullptr);
     if (target_inst == irb->codegen->invalid_inst_src)
test/compile_errors.zig
@@ -1029,7 +1029,6 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
     , &[_][]const u8{
         "tmp.zig:3:21: error: async call in nosuspend scope",
         "tmp.zig:4:9: error: suspend in nosuspend scope",
-        "tmp.zig:5:9: error: resume in nosuspend scope",
     });
 
     cases.add("atomicrmw with bool op not .Xchg",