// RUN: %empty-directory(%t) // RUN: %target-clang %S/Inputs/objc_bridging_opt/objc.m -c -o %t/objc.o -g // RUN: %target-build-swift -module-name=test -O %s -import-objc-header %S/Inputs/objc_bridging_opt/objc.h %t/objc.o -o %t/a.out // RUN: %target-swift-frontend -module-name=test -O -primary-file %s -import-objc-header %S/Inputs/objc_bridging_opt/objc.h -emit-sil | %FileCheck %s --check-prefix=CHECK-SIL // RUN: %target-codesign %t/a.out // RUN: %target-run %t/a.out | %FileCheck %s // REQUIRES: swift_in_compiler // REQUIRES: executable_test // REQUIRES: objc_interop import Foundation // CHECK-SIL-LABEL: sil hidden [noinline] @$s4test0A17NonOptionalStringyyF // CHECK-SIL: [[F1:%[0-9]+]] = function_ref @returnNSString // CHECK-SIL: apply [[F1]]() // CHECK-SIL-NOT: apply // CHECK-SIL: switch_enum // CHECK-SIL: [[F2:%[0-9]+]] = function_ref @$sSS10FoundationE19_bridgeToObjectiveCSo8NSStringCyF // CHECK-SIL: apply [[F2]] // CHECK-SIL-NOT: apply // CHECK-SIL: [[F3:%[0-9]+]] = function_ref @useNSString // CHECK-SIL: apply [[F3]] // CHECK-SIL: // end sil function '$s4test0A17NonOptionalStringyyF' @inline(never) func testNonOptionalString() { useNSString(returnNSString()) } // CHECK-SIL-LABEL: sil hidden [noinline] @$s4test0A14OptionalStringyySbF // CHECK-SIL-NOT: bridge // CHECK-SIL: // end sil function '$s4test0A14OptionalStringyySbF' @inline(never) func testOptionalString(_ some: Bool) { useOptNSString(returnOptNSString(some)) } // CHECK-SIL-LABEL: sil hidden [noinline] @$s4test0a13NonOptionalToC6StringyyF // CHECK-SIL: [[F1:%[0-9]+]] = function_ref @returnNSString // CHECK-SIL: apply [[F1]]() // CHECK-SIL-NOT: apply // CHECK-SIL: switch_enum // CHECK-SIL: [[F2:%[0-9]+]] = function_ref @$sSS10FoundationE19_bridgeToObjectiveCSo8NSStringCyF // CHECK-SIL: apply [[F2]] // CHECK-SIL-NOT: apply // CHECK-SIL: [[F3:%[0-9]+]] = function_ref @useOptNSString // CHECK-SIL: apply [[F3]] // CHECK-SIL: // end sil function '$s4test0a13NonOptionalToC6StringyyF' @inline(never) func testNonOptionalToOptionalString() { useOptNSString(returnNSString()) } // CHECK-SIL-LABEL: sil hidden [noinline] @$s4test0a13OptionalToNonB6StringyySbF // CHECK-SIL-NOT: bridge // CHECK-SIL: // end sil function '$s4test0a13OptionalToNonB6StringyySbF' @inline(never) func testOptionalToNonOptionalString(_ some: Bool) { if let s = returnOptNSString(some) { useNSString(s) } } // CHECK-SIL-LABEL: sil hidden [noinline] @$s4test0A15NonOptionalLoopyySiF // CHECK-SIL: [[F1:%[0-9]+]] = function_ref @returnNSString // CHECK-SIL: apply [[F1]]() // CHECK-SIL-NOT: apply // CHECK-SIL: switch_enum // CHECK-SIL: [[F2:%[0-9]+]] = function_ref @$sSS10FoundationE19_bridgeToObjectiveCSo8NSStringCyF // CHECK-SIL: apply [[F2]] // CHECK-SIL-NOT: apply // CHECK-SIL: [[F3:%[0-9]+]] = function_ref @useNSString // CHECK-SIL: apply [[F3]] // CHECK-SIL: // end sil function '$s4test0A15NonOptionalLoopyySiF' @inline(never) func testNonOptionalLoop(_ n: Int) { let s = returnNSString() for _ in 0..