// RUN: %target-typecheck-verify-swift -swift-version 3 // RUN: %target-typecheck-verify-swift -swift-version 4 // rdar://problem/31969605 class Base {} class Derived : Base {} protocol Refined {} protocol Proto : Refined {} extension Base : Refined {} func baseFn(_: Base) {} func superclassConversion(fn: @escaping (Base) -> ()) { let _: (Derived) -> () = fn } func existentialConversion(fn: @escaping (Refined) -> ()) { let _: (Proto) -> () = fn let _: (Base) -> () = fn let _: (Derived) -> () = fn } // rdar://problem/31725325 func a(_: [(String, (b) -> () -> Void)]) {} func a(_: [(String, (b) -> () throws -> Void)]) {} class c { func e() {} static var d = [("", e)] } a(c.d) func b(_: (T) -> () -> ()) {} b(c.e) func bar(_: () -> ()) {} func bar(_: () throws -> ()) {} func bar_empty() {} bar(bar_empty)