// RUN: %swift -gnone -O -disable-legacy-type-info -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
