| // RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -emit-sil %s | %FileCheck %s |
| // REQUIRES: objc_interop |
| |
| sil_stage raw |
| |
| import Swift |
| import Foundation |
| |
| struct MyError: Error {} |
| |
| // CHECK-LABEL: sil @cast_nserror_to_specific_error |
| sil @cast_nserror_to_specific_error : $@convention(thin) (@in NSError, @in NSNumber, @in NSValue) -> () { |
| entry(%0 : @trivial $*NSError, %1 : @trivial $*NSNumber, %2 : @trivial $*NSValue): |
| %f = function_ref @use : $@convention(thin) <T> (@in T) -> () |
| %a = alloc_stack $MyError |
| // CHECK: checked_cast_addr_br {{.*}} NSError {{.*}} to MyError |
| checked_cast_addr_br take_always NSError in %0 : $*NSError to MyError in %a : $*MyError, yes, no |
| |
| yes: |
| apply %f<MyError>(%a) : $@convention(thin) <T> (@in T) -> () |
| br done |
| |
| no: |
| br done |
| |
| done: |
| dealloc_stack %a : $*MyError |
| return undef : $() |
| } |
| |
| sil @use : $@convention(thin) <T> (@in T) -> () |