| // RUN: %swift -gnone -O -target x86_64-apple-macosx10.9 -emit-assembly %s -o - | %FileCheck %s |
| |
| // REQUIRES: CODEGENERATOR=X86 |
| |
| // rdar://17999904 |
| |
| // No i386 test right now because we don't actually have a formal pattern there. |
| |
| import Builtin |
| |
| class C {} |
| |
| sil_vtable C {} |
| |
| sil [ossa] @_TFC21autorelease_optimized1Cd : $@convention(method) (@owned C) -> @owned Builtin.NativeObject { |
| bb0(%0 : @owned $C): |
| %1 = unchecked_ref_cast %0 : $C to $Builtin.NativeObject // user: %2 |
| return %1 : $Builtin.NativeObject // id: %2 |
| } |
| |
| sil public_external @foo : $@convention(thin) (@owned C) -> @autoreleased C |
| sil public_external @bar : $@convention(thin) (@owned C) -> () |
| |
| sil [ossa] @baz : $@convention(thin) (@owned C) -> () { |
| bb0(%0 : @owned $C): |
| %1 = function_ref @foo : $@convention(thin) (@owned C) -> @autoreleased C |
| %2 = apply %1(%0) : $@convention(thin) (@owned C) -> @autoreleased C |
| |
| // This call is just so that we won't tail-call |
| // objc_retainAutoreleasedReturnValue, which complicates the test. |
| %3 = function_ref @bar : $@convention(thin) (@owned C) -> () |
| apply %3(%2) : $@convention(thin) (@owned C) -> () |
| %5 = tuple () |
| return %5 : $() |
| } |
| |
| // CHECK: callq _foo |
| // CHECK-NEXT: movq %rax, %rdi |
| // CHECK-NEXT: callq _objc_retainAutoreleasedReturnValue |