// RUN: %target-swift-frontend -assume-parsing-unqualified-ownership-sil %s -emit-ir | %FileCheck %s

// REQUIRES: objc_interop

sil_stage canonical

import Swift

class Foo {}
sil_vtable Foo {}

sil @_T010objc_block3FooCfD : $Foo -> ()

sil @call_block : $@convention(thin) (@convention(block) Foo -> Foo, Foo) -> Foo {
entry(%b : $@convention(block) Foo -> Foo, %x : $Foo):
  %y = apply %b(%x) : $@convention(block) Foo -> Foo
  return %y : $Foo
}
// CHECK-LABEL: define{{( protected)?}} swiftcc %T10objc_block3FooC* @call_block(%objc_block*, %T10objc_block3FooC*) {{.*}} {
// CHECK:       entry:
// CHECK:         %2 = getelementptr inbounds %objc_block, %objc_block* %0, i32 0, i32 3
// CHECK:         %3 = load i8*, i8** %2
// CHECK:         %4 = bitcast i8* %3 to i8* (%objc_block*, i8*)*
// CHECK:         %5 = bitcast %T10objc_block3FooC* %1 to i8*
// CHECK:         %6 = call i8* %4(%objc_block* %0, i8* %5)
// CHECK:         %7 = bitcast i8* %6 to %T10objc_block3FooC*
// CHECK:         ret %T10objc_block3FooC* %7
// CHECK:       }

sil @generic : $@convention(thin) <T> (@in T) -> ()

sil @generic_with_block : $@convention(thin) (@in @convention(block) () -> ()) -> () {
entry(%b : $*@convention(block) () -> ()):
  %f = function_ref @generic : $@convention(thin) <T> (@in T) -> ()
  %z = apply %f<@convention(block) () -> ()>(%b) : $@convention(thin) <T> (@in T) -> ()
  return %z : $()
}

// CHECK-LABEL: define{{( protected)?}} swiftcc void @generic_with_block(%objc_block** noalias nocapture dereferenceable({{.*}}))
// --                                                                               0x100_0001 = block convention, 1 arg
// CHECK:         call %swift.type* @swift_getFunctionTypeMetadata1([[WORD:i(64|32)]] 16777217

