// RUN: %target-swift-frontend -enable-objc-interop -primary-file %s -emit-ir -sil-verify-all | %FileCheck %s -DINT=i%target-ptrsize --check-prefixes=CHECK,CHECK-objc,CHECK-%target-ptrsize // RUN: %target-swift-frontend -disable-objc-interop -primary-file %s -emit-ir -sil-verify-all | %FileCheck %s -DINT=i%target-ptrsize --check-prefixes=CHECK,CHECK-native,CHECK-%target-ptrsize // REQUIRES: concurrency, objc_codegen // XFAIL: CPU=arm64e sil_stage canonical import Builtin import Swift import _Concurrency // CHECK-LABEL: define hidden swift{{(tail)?}}cc void @get_task(ptr swiftasync %0) sil hidden [ossa] @get_task : $@async @convention(thin) () -> @owned Builtin.NativeObject { bb0: // CHECK: [[TASK:%.*]] = call swiftcc ptr @swift_task_getCurrent() %0 = builtin "getCurrentAsyncTask"() : $Builtin.NativeObject // CHECK-NEXT: [[TASK_COPY:%.*]] = call ptr @swift_retain(ptr returned [[TASK]]) %1 = copy_value %0 : $Builtin.NativeObject end_lifetime %0 : $Builtin.NativeObject return %1 : $Builtin.NativeObject } // CHECK-LABEL: define hidden swift{{(tail)?}}cc void @cancel_task(ptr %0) // CHECK: call swift{{(tail)?}}cc void @swift_task_cancel(ptr %0) sil hidden [ossa] @cancel_task : $@convention(method) (@guaranteed Builtin.NativeObject) -> () { bb0(%0 : @guaranteed $Builtin.NativeObject): %4 = builtin "cancelAsyncTask"(%0 : $Builtin.NativeObject) : $() %5 = tuple () return %5 : $() } // CHECK-LABEL: define hidden swift{{(tail)?}}cc void @launch_future sil hidden [ossa] @launch_future : $@convention(method) (Int, @owned @async @callee_guaranteed @substituted <τ_0_0> () -> (@out τ_0_0, @error Error) for ) -> () { bb0(%flags : $Int, %taskFunction: @owned $@async @callee_guaranteed @substituted <τ_0_0> () -> (@out τ_0_0, @error Error) for ): // CHECK-NOT: br i1 // CHECK: [[NEW_TASK_AND_CONTEXT:%.*]] = call swift{{(tail)?}}cc %swift.async_task_and_context @swift_task_create([[INT]] %0, ptr null, ptr %T, ptr %1, ptr %2) %optSerialExecutor = enum $Optional, #Optional.none %optTaskGroup = enum $Optional, #Optional.none %optTaskExecutor = enum $Optional, #Optional.none %optTaskExecutorOwned = enum $Optional, #Optional.none %taskName = enum $Optional, #Optional.none %20 = builtin "createAsyncTask"(%flags : $Int, %optSerialExecutor : $Optional, %optTaskGroup : $Optional, %optTaskExecutor : $Optional, %optTaskExecutorOwned : $Optional, %taskName : $Optional, %taskFunction : $@async @callee_guaranteed @substituted <τ_0_0> () -> (@out τ_0_0, @error Error) for ) : $(Builtin.NativeObject, Builtin.RawPointer) destroy_value %20 : $(Builtin.NativeObject, Builtin.RawPointer) %21 = tuple () return %21 : $() } // CHECK-LABEL: define hidden swift{{(tail)?}}cc void @launch_future_on( sil hidden [ossa] @launch_future_on : $@convention(method) (Int, Builtin.Executor, @owned @async @callee_guaranteed @substituted <τ_0_0> () -> (@out τ_0_0, @error Error) for ) -> () { bb0(%flags : $Int, %serialExecutor : $Builtin.Executor, %taskFunction: @owned $@async @callee_guaranteed @substituted <τ_0_0> () -> (@out τ_0_0, @error Error) for ): // CHECK: [[EXECUTOR_RECORD:%.*]] = alloca %swift.serial_executor_task_option // CHECK-NOT: br i1 // CHECK: [[BASE_GEP:%.*]] = getelementptr inbounds{{.*}} %swift.serial_executor_task_option, ptr [[EXECUTOR_RECORD]], i32 0, i32 0 // CHECK: [[FLAGS_GEP:%.*]] = getelementptr inbounds{{.*}} %swift.task_option, ptr [[BASE_GEP]], i32 0, i32 0 // CHECK: store [[INT]] 0, ptr [[FLAGS_GEP]], align // CHECK: [[PARENT_GEP:%.*]] = getelementptr inbounds{{.*}} %swift.task_option, ptr [[BASE_GEP]], i32 0, i32 1 // CHECK: store ptr null, ptr [[PARENT_GEP]], align // CHECK: [[EXECUTOR_GEP:%.*]] = getelementptr inbounds{{.*}} %swift.serial_executor_task_option, ptr [[EXECUTOR_RECORD]], i32 0, i32 1 // CHECK: [[EXECUTOR_IDENT_GEP:%.*]] = getelementptr inbounds{{.*}} %swift.executor, ptr [[EXECUTOR_GEP]], i32 0, i32 0 // CHECK: store [[INT]] %1, ptr [[EXECUTOR_IDENT_GEP]], align // CHECK: [[EXECUTOR_IMPL_GEP:%.*]] = getelementptr inbounds{{.*}} %swift.executor, ptr [[EXECUTOR_GEP]], i32 0, i32 1 // CHECK: store [[INT]] %2, ptr [[EXECUTOR_IMPL_GEP]], align // CHECK: [[NEW_TASK_AND_CONTEXT:%.*]] = call swift{{(tail)?}}cc %swift.async_task_and_context @swift_task_create([[INT]] %0, ptr [[EXECUTOR_RECORD]], ptr %T, ptr %3, ptr %4) %optSerialExecutor = enum $Optional, #Optional.some, %serialExecutor : $Builtin.Executor %optTaskGroup = enum $Optional, #Optional.none %optTaskExecutor = enum $Optional, #Optional.none %optTaskExecutorOwned = enum $Optional, #Optional.none %taskName = enum $Optional, #Optional.none %20 = builtin "createAsyncTask"(%flags : $Int, %optSerialExecutor : $Optional, %optTaskGroup : $Optional, %optTaskExecutor : $Optional, %optTaskExecutorOwned : $Optional, %taskName : $Optional, %taskFunction : $@async @callee_guaranteed @substituted <τ_0_0> () -> (@out τ_0_0, @error Error) for ) : $(Builtin.NativeObject, Builtin.RawPointer) destroy_value %20 : $(Builtin.NativeObject, Builtin.RawPointer) %21 = tuple () return %21 : $() } // CHECK-LABEL: define hidden swift{{(tail)?}}cc void @launch_future_in_group // CHECK: [[OPTIONS:%.*]] = alloca %swift.task_group_task_option // CHECK-NOT: br i1 // CHECK: [[BASE_GEP:%.*]] = getelementptr inbounds{{.*}} %swift.task_group_task_option, ptr [[OPTIONS]], i32 0, i32 0 // CHECK: [[FLAGS_GEP:%.*]] = getelementptr inbounds{{.*}} %swift.task_option, ptr [[BASE_GEP]], i32 0, i32 0 // CHECK: store [[INT]] 1, ptr [[FLAGS_GEP]], align // CHECK: [[PARENT_GEP:%.*]] = getelementptr inbounds{{.*}} %swift.task_option, ptr [[BASE_GEP]], i32 0, i32 1 // CHECK: store ptr null, ptr [[PARENT_GEP]], align // CHECK: [[GROUP_GEP:%.*]] = getelementptr inbounds{{.*}} %swift.task_group_task_option, ptr [[OPTIONS]], i32 0, i32 1 // CHECK: store ptr %0, ptr [[GROUP_GEP]], align // CHECK: call swiftcc %swift.async_task_and_context @swift_task_create([[INT]] %3, ptr [[OPTIONS]], sil hidden @launch_future_in_group : $@convention(thin) (Builtin.RawPointer, @owned @async @callee_guaranteed @substituted <τ_0_0> () -> (@out τ_0_0, @error Error) for , Int) -> () { bb0(%taskGroup : $Builtin.RawPointer, %taskFunction : $@async @callee_guaranteed @substituted <τ_0_0> () -> (@out τ_0_0, @error Error) for , %flags: $Int): %optSerialExecutor = enum $Optional, #Optional.none %optTaskGroup = enum $Optional, #Optional.some!enumelt, %taskGroup : $Builtin.RawPointer %optTaskExecutor = enum $Optional, #Optional.none %optTaskExecutorOwned = enum $Optional, #Optional.none %taskName = enum $Optional, #Optional.none %9 = builtin "createAsyncTask"(%flags : $Int, %optSerialExecutor : $Optional, %optTaskGroup : $Optional, %optTaskExecutor : $Optional, %optTaskExecutorOwned : $Optional, %taskName : $Optional, %taskFunction : $@async @callee_guaranteed @substituted <τ_0_0> () -> (@out τ_0_0, @error Error) for ) : $(Builtin.NativeObject, Builtin.RawPointer) %10 = tuple_extract %9 : $(Builtin.NativeObject, Builtin.RawPointer), 0 strong_release %10 : $Builtin.NativeObject %12 = tuple () return %12 : $() } // CHECK-LABEL: define hidden swift{{(tail)?}}cc void @launch_future_opt_task_group sil hidden [ossa] @launch_future_opt_task_group : $@convention(method) (Int, Optional, @owned @async @callee_guaranteed @substituted <τ_0_0> () -> (@out τ_0_0, @error Error) for ) -> () { bb0(%flags : $Int, %optTaskGroup : $Optional, %taskFunction: @owned $@async @callee_guaranteed @substituted <τ_0_0> () -> (@out τ_0_0, @error Error) for ): // CHECK: [[OPTIONS:%.*]] = alloca %swift.task_group_task_option // CHECK: [[GROUP_IS_NULL:%.*]] = icmp eq [[INT]] %1, 0 // CHECK: br i1 [[GROUP_IS_NULL]], label %task_group.cont, label %task_group.some // CHECK: task_group.some: // CHECK: [[GROUP:%.*]] = inttoptr [[INT]] %1 to ptr // CHECK: [[BASE_GEP:%.*]] = getelementptr inbounds{{.*}} %swift.task_group_task_option, ptr [[OPTIONS]], i32 0, i32 0 // CHECK: [[FLAGS_GEP:%.*]] = getelementptr inbounds{{.*}} %swift.task_option, ptr [[BASE_GEP]], i32 0, i32 0 // CHECK: store [[INT]] 1, ptr [[FLAGS_GEP]], align // CHECK: [[PARENT_GEP:%.*]] = getelementptr inbounds{{.*}} %swift.task_option, ptr [[BASE_GEP]], i32 0, i32 1 // CHECK: store ptr null, ptr [[PARENT_GEP]], align // CHECK: [[GROUP_GEP:%.*]] = getelementptr inbounds{{.*}} %swift.task_group_task_option, ptr [[OPTIONS]], i32 0, i32 1 // CHECK: store ptr [[GROUP]], ptr [[GROUP_GEP]], align // CHECK: br label %task_group.cont // CHECK: task_group.cont: // CHECK: phi ptr [ null, %entry ], [ [[OPTIONS]], %task_group.some ] // CHECK: [[NEW_TASK_AND_CONTEXT:%.*]] = call swift{{(tail)?}}cc %swift.async_task_and_context @swift_task_create( %optSerialExecutor = enum $Optional, #Optional.none %optTaskExecutor = enum $Optional, #Optional.none %optTaskExecutorOwned = enum $Optional, #Optional.none %taskName = enum $Optional, #Optional.none %20 = builtin "createAsyncTask"(%flags : $Int, %optSerialExecutor : $Optional, %optTaskGroup : $Optional, %optTaskExecutor : $Optional, %optTaskExecutorOwned : $Optional, %taskName : $Optional, %taskFunction : $@async @callee_guaranteed @substituted <τ_0_0> () -> (@out τ_0_0, @error Error) for ) : $(Builtin.NativeObject, Builtin.RawPointer) destroy_value %20 : $(Builtin.NativeObject, Builtin.RawPointer) %result = tuple () return %result : $() } // CHECK-LABEL: define hidden swift{{(tail)?}}cc void @launch_discarding_future_in_group sil hidden @launch_discarding_future_in_group : $@convention(thin) (Builtin.RawPointer, @owned @async @callee_guaranteed () -> @error Error, Int) -> () { bb0(%taskGroup : $Builtin.RawPointer, %taskFunction : $@async @callee_guaranteed () -> @error Error, %flags: $Int): %optSerialExecutor = enum $Optional, #Optional.none %optTaskGroup = enum $Optional, #Optional.some!enumelt, %taskGroup : $Builtin.RawPointer %optTaskExecutor = enum $Optional, #Optional.none %optTaskExecutorOwned = enum $Optional, #Optional.none %taskName = enum $Optional, #Optional.none // CHECK-NOT: br i1 // CHECK: call swift{{(tail)?}}cc %swift.async_task_and_context @swift_task_create( %9 = builtin "createAsyncTask"(%flags : $Int, %optSerialExecutor : $Optional, %optTaskGroup : $Optional, %optTaskExecutor : $Optional, %optTaskExecutorOwned : $Optional, %taskName : $Optional, %taskFunction : $@async @callee_guaranteed () -> @error Error) : $(Builtin.NativeObject, Builtin.RawPointer) %10 = tuple_extract %9 : $(Builtin.NativeObject, Builtin.RawPointer), 0 strong_release %10 : $Builtin.NativeObject %12 = tuple () return %12 : $() } // CHECK-LABEL: define hidden swift{{(tail)?}}cc void @launch_discarding_future_in_group_with_executor sil hidden @launch_discarding_future_in_group_with_executor : $@convention(thin) (Builtin.RawPointer, Builtin.Executor, @owned @async @callee_guaranteed () -> @error Error, Int) -> () { bb0(%taskGroup : $Builtin.RawPointer, %taskExecutor : $Builtin.Executor, %taskFunction : $@async @callee_guaranteed () -> @error Error, %flags: $Int): %optSerialExecutor = enum $Optional, #Optional.none %optTaskGroup = enum $Optional, #Optional.some!enumelt, %taskGroup : $Builtin.RawPointer %optTaskExecutor = enum $Optional, #Optional.some!enumelt, %taskExecutor : $Builtin.Executor %optTaskExecutorOwned = enum $Optional, #Optional.none %taskName = enum $Optional, #Optional.none // CHECK: [[GROUP_RECORD:%.*]] = alloca %swift.task_group_task_option // CHECK: [[EXECUTOR_RECORD:%.*]] = alloca %swift.task_executor_task_option // CHECK-NOT: br i1 // CHECK: [[BASE_GEP:%.*]] = getelementptr inbounds{{.*}} %swift.task_group_task_option, ptr [[GROUP_RECORD]], i32 0, i32 0 // CHECK: [[FLAGS_GEP:%.*]] = getelementptr inbounds{{.*}} %swift.task_option, ptr [[BASE_GEP]], i32 0, i32 0 // CHECK: store [[INT]] 1, ptr [[FLAGS_GEP]], align // CHECK: [[PARENT_GEP:%.*]] = getelementptr inbounds{{.*}} %swift.task_option, ptr [[BASE_GEP]], i32 0, i32 1 // CHECK: store ptr null, ptr [[PARENT_GEP]], align // CHECK: [[GROUP_GEP:%.*]] = getelementptr inbounds{{.*}} %swift.task_group_task_option, ptr [[GROUP_RECORD]], i32 0, i32 1 // CHECK: store ptr %0, ptr [[GROUP_GEP]], align // CHECK: [[BASE_GEP:%.*]] = getelementptr inbounds{{.*}} %swift.task_executor_task_option, ptr [[EXECUTOR_RECORD]], i32 0, i32 0 // CHECK: [[FLAGS_GEP:%.*]] = getelementptr inbounds{{.*}} %swift.task_option, ptr [[BASE_GEP]], i32 0, i32 0 // CHECK: store [[INT]] 5, ptr [[FLAGS_GEP]], align // CHECK: [[PARENT_GEP:%.*]] = getelementptr inbounds{{.*}} %swift.task_option, ptr [[BASE_GEP]], i32 0, i32 1 // CHECK: store ptr [[GROUP_RECORD]], ptr [[PARENT_GEP]], align // CHECK: [[EXECUTOR_GEP:%.*]] = getelementptr inbounds{{.*}} %swift.task_executor_task_option, ptr [[EXECUTOR_RECORD]], i32 0, i32 1 // CHECK: [[EXECUTOR_IDENT_GEP:%.*]] = getelementptr inbounds{{.*}} %swift.executor, ptr [[EXECUTOR_GEP]], i32 0, i32 0 // CHECK: store [[INT]] %1, ptr [[EXECUTOR_IDENT_GEP]], align // CHECK: [[EXECUTOR_IMPL_GEP:%.*]] = getelementptr inbounds{{.*}} %swift.executor, ptr [[EXECUTOR_GEP]], i32 0, i32 1 // CHECK: store [[INT]] %2, ptr [[EXECUTOR_IMPL_GEP]], align // CHECK: call swift{{(tail)?}}cc %swift.async_task_and_context @swift_task_create([[INT]] %5, ptr [[EXECUTOR_RECORD]] %9 = builtin "createAsyncTask"(%flags : $Int, %optSerialExecutor : $Optional, %optTaskGroup : $Optional, %optTaskExecutor: $Optional, %optTaskExecutorOwned : $Optional, %taskName : $Optional, %taskFunction : $@async @callee_guaranteed () -> @error Error) : $(Builtin.NativeObject, Builtin.RawPointer) %10 = tuple_extract %9 : $(Builtin.NativeObject, Builtin.RawPointer), 0 strong_release %10 : $Builtin.NativeObject %12 = tuple () return %12 : $() } // CHECK-LABEL: define hidden swift{{(tail)?}}cc void @launch_void_future sil hidden [ossa] @launch_void_future : $@convention(method) (Int, Builtin.RawPointer, @owned @async @callee_guaranteed @substituted <τ_0_0> () -> (@out τ_0_0, @error Error) for <()>) -> () { bb0(%flags : $Int, %taskGroup : $Builtin.RawPointer, %taskFunction: @owned $@async @callee_guaranteed @substituted <τ_0_0> () -> (@out τ_0_0, @error Error) for <()>): %optSerialExecutor = enum $Optional, #Optional.none %optTaskGroup = enum $Optional, #Optional.some!enumelt, %taskGroup : $Builtin.RawPointer %optTaskExecutor = enum $Optional, #Optional.none %optTaskExecutorOwned = enum $Optional, #Optional.none %taskName = enum $Optional, #Optional.none // CHECK: [[NEW_TASK_AND_CONTEXT:%.*]] = call swift{{(tail)?}}cc %swift.async_task_and_context @swift_task_create( %20 = builtin "createAsyncTask"<()>(%flags : $Int, %optSerialExecutor : $Optional, %optTaskGroup : $Optional, %optTaskExecutor : $Optional, %optTaskExecutorOwned : $Optional, %taskName : $Optional, %taskFunction : $@async @callee_guaranteed @substituted <τ_0_0> () -> (@out τ_0_0, @error Error) for <()>) : $(Builtin.NativeObject, Builtin.RawPointer) destroy_value %20 : $(Builtin.NativeObject, Builtin.RawPointer) %21 = tuple () return %21 : $() } // CHECK-LABEL: define hidden swiftcc void @resume_nonthrowing_continuation sil hidden [ossa] @resume_nonthrowing_continuation : $(@in Builtin.NativeObject, Builtin.RawUnsafeContinuation) -> () { bb0(%0 : $*Builtin.NativeObject, %1 : $Builtin.RawUnsafeContinuation): // CHECK: [[CONTEXT_SLOT:%.*]] = getelementptr inbounds{{.*}} %swift.task, ptr %1, i32 0, i32 8 // CHECK-NEXT: [[CONTEXT_OPAQUE:%.*]] = load ptr, ptr [[CONTEXT_SLOT]], align // CHECK-NEXT: [[RESULT_ADDR_SLOT:%.*]] = getelementptr inbounds{{.*}} %swift.continuation_context, ptr [[CONTEXT_OPAQUE]], i32 0, i32 4 // CHECK-NEXT: [[RESULT_ADDR_OPAQUE:%.*]] = load ptr, ptr [[RESULT_ADDR_SLOT]], align // CHECK-NEXT: [[VALUE:%.*]] = load ptr, ptr %0, align // CHECK-NEXT: store ptr [[VALUE]], ptr [[RESULT_ADDR_OPAQUE]], align // CHECK-NEXT: call swiftcc void @swift_continuation_resume(ptr %1) // CHECK-NEXT: ret void builtin "resumeNonThrowingContinuationReturning"(%1 : $Builtin.RawUnsafeContinuation, %0 : $*Builtin.NativeObject) : $() %21 = tuple () return %21 : $() } // CHECK-LABEL: define hidden swiftcc void @resume_throwing_continuation sil hidden [ossa] @resume_throwing_continuation : $(@in Builtin.NativeObject, Builtin.RawUnsafeContinuation) -> () { bb0(%0 : $*Builtin.NativeObject, %1 : $Builtin.RawUnsafeContinuation): // CHECK: [[CONTEXT_SLOT:%.*]] = getelementptr inbounds{{.*}} %swift.task, ptr %1, i32 0, i32 8 // CHECK-NEXT: [[CONTEXT_OPAQUE:%.*]] = load ptr, ptr [[CONTEXT_SLOT]], align // CHECK-NEXT: [[RESULT_ADDR_SLOT:%.*]] = getelementptr inbounds{{.*}} %swift.continuation_context, ptr [[CONTEXT_OPAQUE]], i32 0, i32 4 // CHECK-NEXT: [[RESULT_ADDR_OPAQUE:%.*]] = load ptr, ptr [[RESULT_ADDR_SLOT]], align // CHECK-NEXT: [[VALUE:%.*]] = load ptr, ptr %0, align // CHECK-NEXT: store ptr [[VALUE]], ptr [[RESULT_ADDR_OPAQUE]], align // CHECK-NEXT: call swiftcc void @swift_continuation_throwingResume(ptr %1) // CHECK-NEXT: ret void builtin "resumeThrowingContinuationReturning"(%1 : $Builtin.RawUnsafeContinuation, %0 : $*Builtin.NativeObject) : $() %21 = tuple () return %21 : $() } // CHECK-LABEL: define hidden swiftcc void @resume_throwing_continuation_throwing sil hidden [ossa] @resume_throwing_continuation_throwing : $(@owned Error, Builtin.RawUnsafeContinuation) -> () { bb0(%0 : @owned $Error, %1 : $Builtin.RawUnsafeContinuation): // CHECK: call swiftcc void @swift_continuation_throwingResumeWithError(ptr %1, ptr %0) // CHECK-NEXT: ret void builtin "resumeThrowingContinuationThrowing"(%1 : $Builtin.RawUnsafeContinuation, %0 : $Error) : $() %21 = tuple () return %21 : $() } // CHECK-LABEL: define hidden swift{{(tail)?}}cc void @task_group_create_destroy sil hidden [ossa] @task_group_create_destroy : $@async () -> () { bb0: // CHECK: [[TASKGROUP:%.*]] = alloca [32 x ptr], align 16 // CHECK: call void @llvm.lifetime.start.p0(i64 -1, ptr [[TASKGROUP]]) // CHECK-NEXT: call swiftcc void @swift_taskGroup_initialize(ptr [[TASKGROUP]], ptr {{.*}}) %0 = metatype $@thin Builtin.Int32.Type %1 = builtin "createTaskGroup"(%0: $@thin Builtin.Int32.Type) : $Builtin.RawPointer // CHECK-NEXT: call swiftcc void @swift_taskGroup_destroy(ptr [[TASKGROUP]]) // CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 -1, ptr [[TASKGROUP]]) builtin "destroyTaskGroup"(%1 : $Builtin.RawPointer) : $() %21 = tuple () return %21 : $() } // CHECK-LABEL: define{{.*}} swiftcc void @testRunInline( // CHECK-SAME: ptr noalias sret(%swift.opaque) [[RESULT:%[^,]+]], // CHECK-SAME: ptr [[CLOSURE:%[^,]+]], // CHECK-SAME: ptr [[CLOSURE_CONTEXT:%[^,]+]], // CHECK-SAME: ptr [[FUTURE_RESULT_TYPE:%[^,]+]]) // CHECK-SAME: { // CHECK: call swiftcc void @swift_task_run_inline( // CHECK-SAME: ptr [[RESULT]], // CHECK-SAME: ptr [[CLOSURE]], // CHECK-SAME: ptr [[CLOSURE_CONTEXT]], // CHECK-SAME: ptr [[FUTURE_RESULT_TYPE]]) // CHECK: } sil hidden @testRunInline : $@convention(thin) (@noescape @async @callee_guaranteed @substituted <τ_0_0> () -> @out τ_0_0 for ) -> @out T { entry(%result : $*T, %closure : $@noescape @async @callee_guaranteed @substituted <τ_0_0> () -> @out τ_0_0 for ): %void = builtin "taskRunInline"(%result : $*T, %closure : $@noescape @async @callee_guaranteed @substituted <τ_0_0> () -> @out τ_0_0 for ) : $() return %void : $() }