// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -enable-experimental-keypaths -emit-silgen %s | %FileCheck %s // REQUIRES: objc_interop import Foundation struct NonObjC { var x: Int var y: NSObject } class Foo: NSObject { @objc var int: Int { fatalError() } @objc var bar: Bar { fatalError() } var nonobjc: NonObjC { fatalError() } @objc(thisIsADifferentName) var differentName: Bar { fatalError() } @objc subscript(x: Int) -> Foo { return self } @objc subscript(x: Bar) -> Foo { return self } } class Bar: NSObject { @objc var foo: Foo { fatalError() } } // CHECK-LABEL: sil hidden @_T013keypaths_objc0B8KeypathsyyF func objcKeypaths() { // CHECK: keypath $WritableKeyPath, (root _ = #keyPath2(NonObjC, .x) // CHECK: keypath $WritableKeyPath, (root _ = #keyPath2(NonObjC, .y) // CHECK: keypath $KeyPath, (objc "int" _ = #keyPath2(Foo, .int) // CHECK: keypath $KeyPath, (objc "bar" _ = #keyPath2(Foo, .bar) // CHECK: keypath $KeyPath, (objc "bar.foo" _ = #keyPath2(Foo, .bar.foo) // CHECK: keypath $KeyPath, (objc "bar.foo.bar" _ = #keyPath2(Foo, .bar.foo.bar) // CHECK: keypath $KeyPath, (root _ = #keyPath2(Foo, .nonobjc) // CHECK: keypath $KeyPath, (root _ = #keyPath2(Foo, .bar.foo.nonobjc.y) // CHECK: keypath $KeyPath, (objc "thisIsADifferentName" _ = #keyPath2(Foo, .differentName) }