@@ -330,3 +330,33 @@ extension OptionalMemberLookups {
330
330
func checkHotdogs( _ v: some HotdogCompetitor , _ timeLimit: NSObject ) async throws -> String ? {
331
331
return try await v. pileOfHotdogsToEat ( withLimit: timeLimit)
332
332
}
333
+
334
+ /// Issue 65199: pass zero-initialized completion handler arguments for the
335
+ /// normal result on the error path of an ObjC async thunk.
336
+ extension SlowServer : @retroactive FailableFloatLoader {
337
+ public func loadFloatOrThrow( ) async throws -> Float {
338
+ return 0
339
+ }
340
+ }
341
+ // CHECK-LABEL: sil [ossa] @$sSo10SlowServerC10objc_asyncE16loadFloatOrThrowSfyYaKF : $@convention(method) @async (@guaranteed SlowServer) -> (Float, @error any Error)
342
+
343
+ // CHECK-LABEL: sil private [thunk] [ossa] @$sSo10SlowServerC10objc_asyncE16loadFloatOrThrowSfyYaKFTo : $@convention(objc_method) (@convention(block) @Sendable (Float, Optional<NSError>) -> (), SlowServer) -> () {
344
+ // CHECK: function_ref @$sSo10SlowServerC10objc_asyncE16loadFloatOrThrowSfyYaKFyyYacfU_To
345
+
346
+ // CHECK-LABEL: sil shared [thunk] [ossa] @$sSo10SlowServerC10objc_asyncE16loadFloatOrThrowSfyYaKFyyYacfU_To : $@convention(thin) @Sendable @async (@convention(block) @Sendable (Float, Optional<NSError>) -> (), SlowServer) -> ()
347
+ // CHECK: [[BLOCK:%.*]] = copy_block
348
+ // CHECK: [[METHOD:%.*]] = function_ref @$sSo10SlowServerC10objc_asyncE16loadFloatOrThrowSfyYaKF :
349
+ // CHECK: try_apply [[METHOD]]({{%.*}}) : {{.*}}, normal bb1, error bb2
350
+ // CHECK: bb1([[NORMAL_RESULT:%.*]] : $Float):
351
+ // CHECK-NEXT: [[BORROWED_BLOCK:%.*]] = begin_borrow [[BLOCK]] :
352
+ // CHECK-NEXT: [[NIL_NSERROR:%.*]] = enum $Optional<NSError>, #Optional.none
353
+ // CHECK-NEXT: apply [[BORROWED_BLOCK]]([[NORMAL_RESULT]], [[NIL_NSERROR]])
354
+ // CHECK: bb2([[ERROR_RESULT:%.*]] : @owned $any Error):
355
+ // CHECK-NEXT: [[BORROWED_BLOCK:%.*]] = begin_borrow [[BLOCK]] :
356
+ // CHECK-NEXT: // function_ref
357
+ // CHECK-NEXT: [[CONVERT_FN:%.*]] = function_ref
358
+ // CHECK-NEXT: [[NSERROR:%.*]] = apply [[CONVERT_FN]]([[ERROR_RESULT]])
359
+ // CHECK-NEXT: [[SOME_NSERROR:%.*]] = enum $Optional<NSError>, #Optional.some!enumelt, [[NSERROR]] : $NSError
360
+ // CHECK-NEXT: [[ZERO_FLOAT:%.*]] = builtin "zeroInitializer"() : $Float
361
+ // CHECK-NEXT: [[BORROWED_SOME_NSERROR:%.*]] = begin_borrow [[SOME_NSERROR]] :
362
+ // CHECK-NEXT: apply [[BORROWED_BLOCK]]([[ZERO_FLOAT]], [[BORROWED_SOME_NSERROR]])
0 commit comments