@@ -89,6 +89,87 @@ public struct X {
8989 }
9090}
9191
92+ // CHECK-LABEL: sil hidden [ossa] @$s4test0A10CreateTask5valueyx_tlF
93+ // CHECK: [[FLAGS:%.*]] = apply
94+ // CHECK-NEXT: [[OPT_GROUP:%.*]] = enum $Optional<Builtin.RawPointer>, #Optional.none
95+ // CHECK-NEXT: [[OPT_TASK_EXECUTOR:%.*]] = enum $Optional<Builtin.Executor>, #Optional.none
96+ // CHECK: [[CLOSURE:%.*]] = partial_apply
97+ // CHECK-NEXT: [[CONVERTED_CLOSURE:%.*]] = convert_function [[CLOSURE]] : $@Sendable @async @callee_guaranteed () -> (@out T, @error any Error) to $@Sendable @async @callee_guaranteed @substituted <τ_0_0> () -> (@out τ_0_0, @error any Error) for <T>
98+ // CHECK-NEXT: builtin "createAsyncTask"<T>([[FLAGS]] : $Int, [[OPT_GROUP]] : $Optional<Builtin.RawPointer>, [[OPT_TASK_EXECUTOR]] : $Optional<Builtin.Executor>, [[CONVERTED_CLOSURE]] : $@Sendable @async @callee_guaranteed @substituted <τ_0_0> () -> (@out τ_0_0, @error any Error) for <T>) : $(Builtin.NativeObject, Builtin.RawPointer)
99+ func testCreateTask< T> ( value: T ) {
100+ _ = Builtin . createTask ( flags: 0 ) {
101+ value
102+ }
103+ }
104+
105+ // CHECK-LABEL: sil hidden [ossa] @$s4test0A10CreateTask5group5valueyBp_xtlF
106+ // CHECK: [[FLAGS:%.*]] = apply
107+ // CHECK-NEXT: [[OPT_GROUP:%.*]] = enum $Optional<Builtin.RawPointer>, #Optional.some!enumelt, %0 : $Builtin.RawPointer
108+ // CHECK-NEXT: [[OPT_TASK_EXECUTOR:%.*]] = enum $Optional<Builtin.Executor>, #Optional.none
109+ // CHECK: [[CLOSURE:%.*]] = partial_apply
110+ // CHECK-NEXT: [[CONVERTED_CLOSURE:%.*]] = convert_function [[CLOSURE]] : $@Sendable @async @callee_guaranteed () -> (@out T, @error any Error) to $@Sendable @async @callee_guaranteed @substituted <τ_0_0> () -> (@out τ_0_0, @error any Error) for <T>
111+ // CHECK-NEXT: builtin "createAsyncTask"<T>([[FLAGS]] : $Int, [[OPT_GROUP]] : $Optional<Builtin.RawPointer>, [[OPT_TASK_EXECUTOR]] : $Optional<Builtin.Executor>, [[CONVERTED_CLOSURE]] : $@Sendable @async @callee_guaranteed @substituted <τ_0_0> () -> (@out τ_0_0, @error any Error) for <T>) : $(Builtin.NativeObject, Builtin.RawPointer)
112+ func testCreateTask< T> ( group: Builtin . RawPointer , value: T ) {
113+ _ = Builtin . createTask ( flags: 0 , taskGroup: group) {
114+ value
115+ }
116+ }
117+
118+ // CHECK-LABEL: sil hidden [ossa] @$s4test0A10CreateTask8executor5valueyBe_xtlF
119+ // CHECK: [[FLAGS:%.*]] = apply
120+ // CHECK-NEXT: [[OPT_GROUP:%.*]] = enum $Optional<Builtin.RawPointer>, #Optional.none
121+ // CHECK-NEXT: [[OPT_TASK_EXECUTOR:%.*]] = enum $Optional<Builtin.Executor>, #Optional.some!enumelt, %0 : $Builtin.Executor
122+ // CHECK: [[CLOSURE:%.*]] = partial_apply
123+ // CHECK-NEXT: [[CONVERTED_CLOSURE:%.*]] = convert_function [[CLOSURE]] : $@Sendable @async @callee_guaranteed () -> (@out T, @error any Error) to $@Sendable @async @callee_guaranteed @substituted <τ_0_0> () -> (@out τ_0_0, @error any Error) for <T>
124+ // CHECK-NEXT: builtin "createAsyncTask"<T>([[FLAGS]] : $Int, [[OPT_GROUP]] : $Optional<Builtin.RawPointer>, [[OPT_TASK_EXECUTOR]] : $Optional<Builtin.Executor>, [[CONVERTED_CLOSURE]] : $@Sendable @async @callee_guaranteed @substituted <τ_0_0> () -> (@out τ_0_0, @error any Error) for <T>) : $(Builtin.NativeObject, Builtin.RawPointer)
125+ func testCreateTask< T> ( executor: Builtin . Executor , value: T ) {
126+ _ = Builtin . createTask ( flags: 0 , initialTaskExecutor: executor) {
127+ value
128+ }
129+ }
130+
131+ // CHECK-LABEL: sil hidden [ossa] @$s4test0A10CreateTask5group8executor5valueyBp_BextlF
132+ // CHECK: [[FLAGS:%.*]] = apply
133+ // CHECK-NEXT: [[OPT_GROUP:%.*]] = enum $Optional<Builtin.RawPointer>, #Optional.some!enumelt, %0 : $Builtin.RawPointer
134+ // CHECK-NEXT: [[OPT_TASK_EXECUTOR:%.*]] = enum $Optional<Builtin.Executor>, #Optional.some!enumelt, %1 : $Builtin.Executor
135+ // CHECK: [[CLOSURE:%.*]] = partial_apply
136+ // CHECK-NEXT: [[CONVERTED_CLOSURE:%.*]] = convert_function [[CLOSURE]] : $@Sendable @async @callee_guaranteed () -> (@out T, @error any Error) to $@Sendable @async @callee_guaranteed @substituted <τ_0_0> () -> (@out τ_0_0, @error any Error) for <T>
137+ // CHECK-NEXT: builtin "createAsyncTask"<T>([[FLAGS]] : $Int, [[OPT_GROUP]] : $Optional<Builtin.RawPointer>, [[OPT_TASK_EXECUTOR]] : $Optional<Builtin.Executor>, [[CONVERTED_CLOSURE]] : $@Sendable @async @callee_guaranteed @substituted <τ_0_0> () -> (@out τ_0_0, @error any Error) for <T>) : $(Builtin.NativeObject, Builtin.RawPointer)
138+ func testCreateTask< T> ( group: Builtin . RawPointer , executor: Builtin . Executor , value: T ) {
139+ _ = Builtin . createTask ( flags: 0 , taskGroup: group, initialTaskExecutor: executor) {
140+ value
141+ }
142+ }
143+
144+ // A discarding task without a group is not currently a legal
145+ // combination; if we start enforcing that, feel free to change this
146+ // as needed.
147+ // CHECK-LABEL: sil hidden [ossa] @$s4test0A20CreateDiscardingTask5valueyx_tlF
148+ // CHECK: [[FLAGS:%.*]] = apply
149+ // CHECK-NEXT: [[OPT_GROUP:%.*]] = enum $Optional<Builtin.RawPointer>, #Optional.none
150+ // CHECK-NEXT: [[OPT_TASK_EXECUTOR:%.*]] = enum $Optional<Builtin.Executor>, #Optional.none
151+ // CHECK: [[CLOSURE:%.*]] = partial_apply
152+ // CHECK-NEXT: builtin "createAsyncTask"([[FLAGS]] : $Int, [[OPT_GROUP]] : $Optional<Builtin.RawPointer>, [[OPT_TASK_EXECUTOR]] : $Optional<Builtin.Executor>, [[CLOSURE]] : $@Sendable @async @callee_guaranteed () -> @error any Error) : $(Builtin.NativeObject, Builtin.RawPointer)
153+ func testCreateDiscardingTask< T> ( value: T ) {
154+ _ = Builtin . createDiscardingTask ( flags: 0 ) {
155+ _ = value
156+ }
157+ }
158+
159+ // A discarding task without a group is not currently a legal
160+ // combination; if we start enforcing that, feel free to change this
161+ // as needed.
162+ // CHECK-LABEL: sil hidden [ossa] @$s4test0A20CreateDiscardingTask5group8executor5valueyBp_BextlF
163+ // CHECK: [[FLAGS:%.*]] = apply
164+ // CHECK-NEXT: [[OPT_GROUP:%.*]] = enum $Optional<Builtin.RawPointer>, #Optional.some!enumelt, %0 : $Builtin.RawPointer
165+ // CHECK-NEXT: [[OPT_TASK_EXECUTOR:%.*]] = enum $Optional<Builtin.Executor>, #Optional.some!enumelt, %1 : $Builtin.Executor
166+ // CHECK: [[CLOSURE:%.*]] = partial_apply
167+ // CHECK-NEXT: builtin "createAsyncTask"([[FLAGS]] : $Int, [[OPT_GROUP]] : $Optional<Builtin.RawPointer>, [[OPT_TASK_EXECUTOR]] : $Optional<Builtin.Executor>, [[CLOSURE]] : $@Sendable @async @callee_guaranteed () -> @error any Error) : $(Builtin.NativeObject, Builtin.RawPointer)
168+ func testCreateDiscardingTask< T> ( group: Builtin . RawPointer , executor: Builtin . Executor , value: T ) {
169+ _ = Builtin . createDiscardingTask ( flags: 0 , taskGroup: group, initialTaskExecutor: executor) {
170+ _ = value
171+ }
172+ }
92173// CHECK-LABEL: sil [ossa] @$s4test26usesWithUnsafeContinuationyyYaF : $@convention(thin) @async () -> () {
93174public func usesWithUnsafeContinuation( ) async {
94175 // trivial resume type
0 commit comments