Skip to content

Commit c25d2fa

Browse files
committed
[Concurrency] Infer isolation of methods that override caller isolated @objc async handlers to be `@concurrent
This is behavior pre-SE-0461 which is the safest option instead of inferring `nonisolated(nonsending)` and changing the calling convention and foregoing Sendable checking.
1 parent e5d911f commit c25d2fa

File tree

3 files changed

+86
-45
lines changed

3 files changed

+86
-45
lines changed

lib/Sema/TypeCheckConcurrency.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5838,6 +5838,22 @@ computeDefaultInferredActorIsolation(ValueDecl *value) {
58385838
// Use the overridden decl's isolation as the default isolation for this
58395839
// decl.
58405840
auto isolation = getOverriddenIsolationFor(value);
5841+
5842+
// If this is an override of an async completion handler, mark
5843+
// it `@concurrent` instead of inferring `nonisolated(nonsending)`
5844+
// to preserve pre-SE-0461 behavior.
5845+
if (isolation.isCallerIsolationInheriting() &&
5846+
overriddenValue->hasClangNode()) {
5847+
if (auto *AFD = dyn_cast<AbstractFunctionDecl>(overriddenValue)) {
5848+
if (AFD->getForeignAsyncConvention()) {
5849+
return {{ActorIsolation::forNonisolated(/*unsafe=*/false),
5850+
IsolationSource(overriddenValue, IsolationSource::Override)},
5851+
overriddenValue,
5852+
isolation};
5853+
}
5854+
}
5855+
}
5856+
58415857
return {{isolation,
58425858
IsolationSource(overriddenValue, IsolationSource::Override)},
58435859
overriddenValue,

test/Concurrency/attr_execution_objc.swift renamed to test/Concurrency/nonisolated_nonsending_objc_async_by_default.swift

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,14 @@ MAIN_ACTOR
2929

3030
//--- main.swift
3131

32+
class OverrideTest1 : Test {
33+
override func load() async {}
34+
}
35+
36+
class OverrideTest2 : TestIsolated {
37+
override func load() async {}
38+
}
39+
3240
func test(t: Test, i: TestIsolated) async throws {
3341
let fn = t.load // nonisolated(nonsending) () async -> Void
3442

@@ -39,3 +47,10 @@ func test(t: Test, i: TestIsolated) async throws {
3947
let _: () -> Void = isolatedFn
4048
// expected-error@-1 {{invalid conversion from 'async' function of type '@MainActor @Sendable () async -> Void' to synchronous function type '() -> Void'}}
4149
}
50+
51+
func testOverrides(o1: OverrideTest1, o2: OverrideTest2) {
52+
let _: () -> Void = o1.load
53+
// expected-error@-1 {{invalid conversion from 'async' function of type '() async -> ()' to synchronous function type '() -> Void'}}
54+
let _: () -> Void = o2.load
55+
// expected-error@-1 {{invalid conversion from 'async' function of type '@MainActor @Sendable () async -> ()' to synchronous function type '() -> Void'}}
56+
}

test/SILGen/objc_async_from_swift.swift

Lines changed: 55 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -108,85 +108,93 @@ extension SlowServer: NativelySlowServing {}
108108
class SlowServerlet: SlowServer {
109109
// Native Function
110110
//
111-
// CHECK-LABEL: sil hidden [ossa] @$s21objc_async_from_swift13SlowServerletC011doSomethingE8NullablyySiSSYaF : $@convention(method) @async (@sil_isolated @sil_implicit_leading_param @guaranteed Optional<any Actor>, @guaranteed String, @guaranteed SlowServerlet) -> Int {
112-
// CHECK: bb0([[ACTOR:%.*]] : @guaranteed $Optional<any Actor>
111+
// CHECK-LABEL: sil hidden [ossa] @$s21objc_async_from_swift13SlowServerletC011doSomethingE8NullablyySiSSYaF : $@convention(method) @async (@guaranteed String, @guaranteed SlowServerlet) -> Int
112+
// CHECK-NOT: bb0([[ACTOR:%.*]] : @guaranteed $Optional<any Actor>
113+
// CHECK: [[ACTOR:%.*]] = enum $Optional<Builtin.Executor>, #Optional.none!enumelt
113114
// CHECK: hop_to_executor [[ACTOR]]
114115
// CHECK: // end sil function '$s21objc_async_from_swift13SlowServerletC011doSomethingE8NullablyySiSSYaF'
115116

116117
// @objc thunk closure
117118
//
118119
// CHECK-LABEL: sil shared [thunk] [ossa] @$s21objc_async_from_swift13SlowServerletC011doSomethingE8NullablyySiSSYaFyyYacfU_To : $@convention(thin) @Sendable @async (NSString, Optional<@convention(block) @Sendable (Int) -> ()>, SlowServerlet) -> () {
119-
// CHECK: [[ACTOR:%.*]] = enum $Optional<any Actor>, #Optional.none!enumelt
120-
// CHECK: [[FUNC:%.*]] = function_ref @$s21objc_async_from_swift13SlowServerletC011doSomethingE8NullablyySiSSYaF : $@convention(method) @async (@sil_isolated @sil_implicit_leading_param @guaranteed Optional<any Actor>, @guaranteed String, @guaranteed SlowServerlet) -> Int
121-
// CHECK: apply [[FUNC]]([[ACTOR]],
120+
// CHECK: [[STR_ARG:%.*]] = begin_borrow {{.*}} : $String
121+
// CHECK: [[SELF:%.*]] = begin_borrow {{.*}} : $SlowServerlet
122+
// CHECK: [[FUNC:%.*]] = function_ref @$s21objc_async_from_swift13SlowServerletC011doSomethingE8NullablyySiSSYaF : $@convention(method) @async (@guaranteed String, @guaranteed SlowServerlet) -> Int
123+
// CHECK: apply [[FUNC]]([[STR_ARG]], [[SELF]])
122124
// CHECK: } // end sil function '$s21objc_async_from_swift13SlowServerletC011doSomethingE8NullablyySiSSYaFyyYacfU_To'
123125
override func doSomethingSlowNullably(_: String) async -> Int {
124126
return 0
125127
}
126128

127129
// Native function.
128130
//
129-
// CHECK-LABEL: sil hidden [ossa] @$s21objc_async_from_swift13SlowServerletC18findAnswerNullablyyS2SYaF : $@convention(method) @async (@sil_isolated @sil_implicit_leading_param @guaranteed Optional<any Actor>, @guaranteed String, @guaranteed SlowServerlet) -> @owned String {
130-
// CHECK: bb0([[ACTOR:%.*]] : @guaranteed $Optional<any Actor>,
131-
// CHECK: hop_to_executor [[ACTOR]]
131+
// CHECK-LABEL: sil hidden [ossa] @$s21objc_async_from_swift13SlowServerletC18findAnswerNullablyyS2SYaF : $@convention(method) @async (@guaranteed String, @guaranteed SlowServerlet) -> @owned String
132+
// CHECK-NOT: bb0([[ACTOR:%.*]] : @guaranteed $Optional<any Actor>
133+
// CHECK: [[ACTOR:%.*]] = enum $Optional<Builtin.Executor>, #Optional.none!enumelt
134+
// CHECK-NEXT: hop_to_executor [[ACTOR]]
132135
// CHECK: } // end sil function '$s21objc_async_from_swift13SlowServerletC18findAnswerNullablyyS2SYaF'
133136

134137
// @objc closure thunk
135138
// CHECK-LABEL: sil shared [thunk] [ossa] @$s21objc_async_from_swift13SlowServerletC18findAnswerNullablyyS2SYaFyyYacfU_To : $@convention(thin) @Sendable @async (NSString, Optional<@convention(block) @Sendable (NSString) -> ()>, SlowServerlet) -> () {
136-
// CHECK: [[ACTOR:%.*]] = enum $Optional<any Actor>, #Optional.none!enumelt
137-
// CHECK: [[FUNC:%.*]] = function_ref @$s21objc_async_from_swift13SlowServerletC18findAnswerNullablyyS2SYaF : $@convention(method) @async (@sil_isolated @sil_implicit_leading_param @guaranteed Optional<any Actor>, @guaranteed String, @guaranteed SlowServerlet) -> @owned String
138-
// CHECK: apply [[FUNC]]([[ACTOR]],
139+
// CHECK: [[STR_ARG:%.*]] = begin_borrow {{.*}} : $String
140+
// CHECK: [[SELF:%.*]] = begin_borrow {{.*}} : $SlowServerlet
141+
// CHECK: [[FUNC:%.*]] = function_ref @$s21objc_async_from_swift13SlowServerletC18findAnswerNullablyyS2SYaF : $@convention(method) @async (@guaranteed String, @guaranteed SlowServerlet) -> @owned String
142+
// CHECK: apply [[FUNC]]([[STR_ARG]], [[SELF]])
139143
// CHECK: } // end sil function '$s21objc_async_from_swift13SlowServerletC18findAnswerNullablyyS2SYaFyyYacfU_To'
140144
override func findAnswerNullably(_ x: String) async -> String {
141145
return x
142146
}
143147

144148
// Native
145149
//
146-
// CHECK-LABEL: sil hidden [ossa] @$s21objc_async_from_swift13SlowServerletC28doSomethingDangerousNullablyyS2SYaKF : $@convention(method) @async (@sil_isolated @sil_implicit_leading_param @guaranteed Optional<any Actor>, @guaranteed String, @guaranteed SlowServerlet) -> (@owned String, @error any Error) {
147-
// CHECK: bb0([[ACTOR:%.*]] : @guaranteed $Optional<any Actor>,
148-
// CHECK: hop_to_executor [[ACTOR]]
150+
// CHECK-LABEL: sil hidden [ossa] @$s21objc_async_from_swift13SlowServerletC28doSomethingDangerousNullablyyS2SYaKF : $@convention(method) @async (@guaranteed String, @guaranteed SlowServerlet) -> (@owned String, @error any Error)
151+
// CHECK-NOT: bb0([[ACTOR:%.*]] : @guaranteed $Optional<any Actor>,
152+
// CHECK: [[ACTOR:%.*]] = enum $Optional<Builtin.Executor>, #Optional.none!enumelt
153+
// CHECK-NEXT: hop_to_executor [[ACTOR]]
149154
// CHECK: } // end sil function '$s21objc_async_from_swift13SlowServerletC28doSomethingDangerousNullablyyS2SYaKF'
150155

151156
// @objc thunk closure
152157
//
153158
// CHECK-LABEL: sil shared [thunk] [ossa] @$s21objc_async_from_swift13SlowServerletC28doSomethingDangerousNullablyyS2SYaKFyyYacfU_To : $@convention(thin) @Sendable @async (NSString, Optional<@convention(block) @Sendable (Optional<NSString>, Optional<NSError>) -> ()>, SlowServerlet) -> () {
154-
// CHECK: [[ACTOR:%.*]] = enum $Optional<any Actor>, #Optional.none!enumelt
155-
// CHECK: [[NATIVE:%.*]] = function_ref @$s21objc_async_from_swift13SlowServerletC28doSomethingDangerousNullablyyS2SYaKF : $@convention(method) @async (@sil_isolated @sil_implicit_leading_param @guaranteed Optional<any Actor>, @guaranteed String, @guaranteed SlowServerlet) -> (@owned String, @error any Error)
156-
// CHECK: apply [[NATIVE]]([[ACTOR]],
159+
// CHECK: [[STR_ARG:%.*]] = begin_borrow {{.*}} : $String
160+
// CHECK: [[SELF:%.*]] = begin_borrow {{.*}} : $SlowServerlet
161+
// CHECK: [[NATIVE:%.*]] = function_ref @$s21objc_async_from_swift13SlowServerletC28doSomethingDangerousNullablyyS2SYaKF : $@convention(method) @async (@guaranteed String, @guaranteed SlowServerlet) -> (@owned String, @error any Error)
162+
// CHECK: apply [[NATIVE]]([[STR_ARG]], [[SELF]])
157163
// CHECK: } // end sil function '$s21objc_async_from_swift13SlowServerletC28doSomethingDangerousNullablyyS2SYaKFyyYacfU_To'
158164
override func doSomethingDangerousNullably(_ x: String) async throws -> String {
159165
return x
160166
}
161167

162168
// Native
163169
//
164-
// CHECK-LABEL: sil hidden [ossa] @$s21objc_async_from_swift13SlowServerletC30doSomethingUnspecifiedNullablySSyYaKF : $@convention(method) @async (@sil_isolated @sil_implicit_leading_param @guaranteed Optional<any Actor>, @guaranteed SlowServerlet) -> (@owned String, @error any Error) {
165-
// CHECK: bb0([[ACTOR:%.*]] : @guaranteed $Optional<any Actor>,
166-
// CHECK: hop_to_executor [[ACTOR]]
170+
// CHECK-LABEL: sil hidden [ossa] @$s21objc_async_from_swift13SlowServerletC30doSomethingUnspecifiedNullablySSyYaKF : $@convention(method) @async (@guaranteed SlowServerlet) -> (@owned String, @error any Error)
171+
// CHECK-NOT: bb0([[ACTOR:%.*]] : @guaranteed $Optional<any Actor>,
172+
// CHECK: [[ACTOR:%.*]] = enum $Optional<Builtin.Executor>, #Optional.none!enumelt
173+
// CHECK-NEXT: hop_to_executor [[ACTOR]]
167174
// CHECK: } // end sil function '$s21objc_async_from_swift13SlowServerletC30doSomethingUnspecifiedNullablySSyYaKF'
168175

169176
// @objc closure thunk
170177
// CHECK-LABEL: sil shared [thunk] [ossa] @$s21objc_async_from_swift13SlowServerletC30doSomethingUnspecifiedNullablySSyYaKFyyYacfU_To : $@convention(thin) @Sendable @async (Optional<@convention(block) @Sendable (Optional<NSString>, Optional<NSError>) -> ()>, SlowServerlet) -> () {
171-
// CHECK: [[ACTOR:%.*]] = enum $Optional<any Actor>, #Optional.none!enumelt
172-
// CHECK: [[NATIVE:%.*]] = function_ref @$s21objc_async_from_swift13SlowServerletC30doSomethingUnspecifiedNullablySSyYaKF : $@convention(method) @async (@sil_isolated @sil_implicit_leading_param @guaranteed Optional<any Actor>, @guaranteed SlowServerlet) -> (@owned String, @error any Error)
173-
// CHECK: apply [[NATIVE]]([[ACTOR]],
178+
// CHECK: [[SELF:%.*]] = begin_borrow {{.*}} : $SlowServerlet
179+
// CHECK: [[NATIVE:%.*]] = function_ref @$s21objc_async_from_swift13SlowServerletC30doSomethingUnspecifiedNullablySSyYaKF : $@convention(method) @async (@guaranteed SlowServerlet) -> (@owned String, @error any Error)
180+
// CHECK: apply [[NATIVE]]([[SELF]])
174181
// CHECK: } // end sil function '$s21objc_async_from_swift13SlowServerletC30doSomethingUnspecifiedNullablySSyYaKFyyYacfU_To'
175182
override func doSomethingUnspecifiedNullably() async throws -> String {
176183
fatalError()
177184
}
178185

179186
// Native
180187
//
181-
// CHECK-LABEL: sil hidden [ossa] @$s21objc_async_from_swift13SlowServerletC17doSomethingFlaggySSyYaKF : $@convention(method) @async (@sil_isolated @sil_implicit_leading_param @guaranteed Optional<any Actor>, @guaranteed SlowServerlet) -> (@owned String, @error any Error) {
182-
// CHECK: bb0([[ACTOR:%.*]] : @guaranteed $Optional<any Actor>,
183-
// CHECK: hop_to_executor [[ACTOR]]
184-
//
188+
// CHECK-LABEL: sil hidden [ossa] @$s21objc_async_from_swift13SlowServerletC17doSomethingFlaggySSyYaKF : $@convention(method) @async (@guaranteed SlowServerlet) -> (@owned String, @error any Error)
189+
// CHECK-NOT: bb0([[ACTOR:%.*]] : @guaranteed $Optional<any Actor>,
190+
// CHECK: [[ACTOR:%.*]] = enum $Optional<Builtin.Executor>, #Optional.none!enumelt
191+
// CHECK-NEXT: hop_to_executor [[ACTOR]]
192+
185193
// @objc thunk closure
186-
// CHECK-LABEL: sil shared [thunk] [ossa] @$s21objc_async_from_swift13SlowServerletC17doSomethingFlaggySSyYaKFyyYacfU_To : $@convention(thin) @Sendable @async (@convention(block) @Sendable (Bool, Optional<NSString>, Optional<NSError>) -> (), SlowServerlet) -> () {
187-
// CHECK: [[ACTOR:%.*]] = enum $Optional<any Actor>, #Optional.none!enumelt
188-
// CHECK: [[NATIVE:%.*]] = function_ref @$s21objc_async_from_swift13SlowServerletC17doSomethingFlaggySSyYaKF : $@convention(method) @async (@sil_isolated @sil_implicit_leading_param @guaranteed Optional<any Actor>, @guaranteed SlowServerlet) -> (@owned String, @error any Error)
189-
// CHECK: try_apply [[NATIVE]]([[ACTOR]], {{.*}}, normal [[NORMAL_BB:bb[0-9]+]], error [[ERROR_BB:bb[0-9]+]]
194+
// CHECK-LABEL: sil shared [thunk] [ossa] @$s21objc_async_from_swift13SlowServerletC17doSomethingFlaggySSyYaKFyyYacfU_To : $@convention(thin) @Sendable @async (@convention(block) @Sendable ({{.*}}, Optional<NSString>, Optional<NSError>) -> (), SlowServerlet) -> () {
195+
// CHECK: [[SELF:%.*]] = begin_borrow {{.*}} : $SlowServerlet
196+
// CHECK: [[NATIVE:%.*]] = function_ref @$s21objc_async_from_swift13SlowServerletC17doSomethingFlaggySSyYaKF : $@convention(method) @async (@guaranteed SlowServerlet) -> (@owned String, @error any Error)
197+
// CHECK: try_apply [[NATIVE]]([[SELF]]) : {{.*}}, normal [[NORMAL_BB:bb[0-9]+]], error [[ERROR_BB:bb[0-9]+]]
190198
// CHECK: [[NORMAL_BB]]({{.*}}):
191199
// CHECK: integer_literal {{.*}}0
192200
// CHECK: [[ERROR_BB]]({{.*}}):
@@ -198,16 +206,17 @@ class SlowServerlet: SlowServer {
198206

199207
// Native
200208
//
201-
// CHECK-LABEL: sil hidden [ossa] @$s21objc_async_from_swift13SlowServerletC21doSomethingZeroFlaggySSyYaKF : $@convention(method) @async (@sil_isolated @sil_implicit_leading_param @guaranteed Optional<any Actor>, @guaranteed SlowServerlet) -> (@owned String, @error any Error) {
202-
// CHECK: bb0([[ACTOR:%.*]] : @guaranteed $Optional<any Actor>,
203-
// CHECK: hop_to_executor [[ACTOR]]
209+
// CHECK-LABEL: sil hidden [ossa] @$s21objc_async_from_swift13SlowServerletC21doSomethingZeroFlaggySSyYaKF : $@convention(method) @async (@guaranteed SlowServerlet) -> (@owned String, @error any Error)
210+
// CHECK-NOT: bb0([[ACTOR:%.*]] : @guaranteed $Optional<any Actor>,
211+
// CHECK: [[ACTOR:%.*]] = enum $Optional<Builtin.Executor>, #Optional.none!enumelt
212+
// CHECK-NEXT: hop_to_executor [[ACTOR]]
204213
// CHECK: } // end sil function '$s21objc_async_from_swift13SlowServerletC21doSomethingZeroFlaggySSyYaKF'
205214
//
206215
// @objc thunk closure
207-
// CHECK-LABEL: sil shared [thunk] [ossa] @$s21objc_async_from_swift13SlowServerletC21doSomethingZeroFlaggySSyYaKFyyYacfU_To : $@convention(thin) @Sendable @async (@convention(block) @Sendable (Optional<NSString>, Bool, Optional<NSError>) -> (), SlowServerlet) -> () {
208-
// CHECK: [[ACTOR:%.*]] = enum $Optional<any Actor>, #Optional.none!enumelt
209-
// CHECK: [[NATIVE:%.*]] = function_ref @$s21objc_async_from_swift13SlowServerletC21doSomethingZeroFlaggySSyYaKF : $@convention(method) @async (@sil_isolated @sil_implicit_leading_param @guaranteed Optional<any Actor>, @guaranteed SlowServerlet) -> (@owned String, @error any Error)
210-
// CHECK: try_apply [[NATIVE]]([[ACTOR]], {{.*}}, normal [[NORMAL_BB:bb[0-9]+]], error [[ERROR_BB:bb[0-9]+]]
216+
// CHECK-LABEL: sil shared [thunk] [ossa] @$s21objc_async_from_swift13SlowServerletC21doSomethingZeroFlaggySSyYaKFyyYacfU_To : $@convention(thin) @Sendable @async (@convention(block) @Sendable (Optional<NSString>, {{.*}}, Optional<NSError>) -> (), SlowServerlet) -> () {
217+
// CHECK: [[SELF:%.*]] = begin_borrow {{.*}} : $SlowServerlet
218+
// CHECK: [[NATIVE:%.*]] = function_ref @$s21objc_async_from_swift13SlowServerletC21doSomethingZeroFlaggySSyYaKF : $@convention(method) @async (@guaranteed SlowServerlet) -> (@owned String, @error any Error)
219+
// CHECK: try_apply [[NATIVE]]([[SELF]]) : {{.*}}, normal [[NORMAL_BB:bb[0-9]+]], error [[ERROR_BB:bb[0-9]+]]
211220
// CHECK: [[NORMAL_BB]]({{.*}}):
212221
// CHECK: integer_literal {{.*}}1
213222
// CHECK: [[ERROR_BB]]({{.*}}):
@@ -218,15 +227,16 @@ class SlowServerlet: SlowServer {
218227

219228
// Native
220229
//
221-
// CHECK-LABEL: sil hidden [ossa] @$s21objc_async_from_swift13SlowServerletC28doSomethingMultiResultFlaggySS_SStyYaKF : $@convention(method) @async (@sil_isolated @sil_implicit_leading_param @guaranteed Optional<any Actor>, @guaranteed SlowServerlet) -> (@owned String, @owned String, @error any Error) {
222-
// CHECK: bb0([[ACTOR:%.*]] : @guaranteed $Optional<any Actor>,
223-
// CHECK: hop_to_executor [[ACTOR]]
230+
// CHECK-LABEL: sil hidden [ossa] @$s21objc_async_from_swift13SlowServerletC28doSomethingMultiResultFlaggySS_SStyYaKF : $@convention(method) @async (@guaranteed SlowServerlet) -> (@owned String, @owned String, @error any Error)
231+
// CHECK-NOT: bb0([[ACTOR:%.*]] : @guaranteed $Optional<any Actor>,
232+
// CHECK: [[ACTOR:%.*]] = enum $Optional<Builtin.Executor>, #Optional.none!enumelt
233+
// CHECK-NEXT: hop_to_executor [[ACTOR]]
224234
// CHECK: } // end sil function '$s21objc_async_from_swift13SlowServerletC28doSomethingMultiResultFlaggySS_SStyYaKF'
225235
//
226-
// CHECK-LABEL: sil shared [thunk] [ossa] @$s21objc_async_from_swift13SlowServerletC28doSomethingMultiResultFlaggySS_SStyYaKFyyYacfU_To : $@convention(thin) @Sendable @async (@convention(block) @Sendable (Bool, Optional<NSString>, Optional<NSError>, Optional<NSString>) -> (), SlowServerlet) -> () {
227-
// CHECK: [[ACTOR:%.*]] = enum $Optional<any Actor>, #Optional.none!enumelt
228-
// CHECK: [[NATIVE:%.*]] = function_ref @$s21objc_async_from_swift13SlowServerletC28doSomethingMultiResultFlaggySS_SStyYaKF : $@convention(method) @async (@sil_isolated @sil_implicit_leading_param @guaranteed Optional<any Actor>, @guaranteed SlowServerlet) -> (@owned String, @owned String, @error any Error)
229-
// CHECK: try_apply [[NATIVE]]([[ACTOR]], {{.*}}, normal [[NORMAL_BB:bb[0-9]+]], error [[ERROR_BB:bb[0-9]+]]
236+
// CHECK-LABEL: sil shared [thunk] [ossa] @$s21objc_async_from_swift13SlowServerletC28doSomethingMultiResultFlaggySS_SStyYaKFyyYacfU_To : $@convention(thin) @Sendable @async (@convention(block) @Sendable ({{.*}}, Optional<NSString>, Optional<NSError>, Optional<NSString>) -> (), SlowServerlet) -> () {
237+
// CHECK: [[SELF:%.*]] = begin_borrow {{.*}} : $SlowServerlet
238+
// CHECK: [[NATIVE:%.*]] = function_ref @$s21objc_async_from_swift13SlowServerletC28doSomethingMultiResultFlaggySS_SStyYaKF : $@convention(method) @async (@guaranteed SlowServerlet) -> (@owned String, @owned String, @error any Error)
239+
// CHECK: try_apply [[NATIVE]]([[SELF]]) : {{.*}}, normal [[NORMAL_BB:bb[0-9]+]], error [[ERROR_BB:bb[0-9]+]]
230240
// CHECK: [[NORMAL_BB]]({{.*}}):
231241
// CHECK: integer_literal {{.*}}1
232242
// CHECK: [[ERROR_BB]]({{.*}}):

0 commit comments

Comments
 (0)