// RUN: %empty-directory(%t) // RUN: %target-swift-frontend -enable-library-evolution -emit-module -o %t/ExternalKeyPaths.swiftmodule -module-name ExternalKeyPaths %S/Inputs/ExternalKeyPaths.swift // RUN: %target-swift-emit-silgen -swift-version 5 -I %t %s | %FileCheck %s import ExternalKeyPaths struct Local { var x: Int var y: String } // CHECK-LABEL: sil hidden [ossa] @{{.*}}16externalKeyPaths func externalKeyPaths(_ x: T, _ y: U, _ z: Int) { // CHECK: keypath $WritableKeyPath, Int>, (root $External; {{.*}} external #External.property) _ = \External.property // CHECK: keypath $WritableKeyPath, Int>, (root $External; {{.*}} external #External.intProperty) _ = \External.intProperty // CHECK: keypath $WritableKeyPath, T>, <τ_0_0, τ_0_1 where τ_0_0 : Hashable> (root $External<τ_0_0>; {{.*}} external #External.property) _ = \External.property // CHECK: keypath $WritableKeyPath, Int>, <τ_0_0, τ_0_1 where τ_0_0 : Hashable> (root $External<τ_0_0>; {{.*}} external #External.intProperty) _ = \External.intProperty // CHECK: keypath $WritableKeyPath, U>, <τ_0_0, τ_0_1 where τ_0_0 : Hashable> (root $External<τ_0_1>; {{.*}} external #External.property) _ = \External.property // CHECK: keypath $WritableKeyPath, Int>, <τ_0_0, τ_0_1 where τ_0_0 : Hashable> (root $External<τ_0_1>; {{.*}} external #External.intProperty) _ = \External.intProperty // CHECK: keypath $KeyPath, Int>, (root $External; {{.*}} external #External.subscript) (%2) _ = \External.[z] // CHECK: keypath $KeyPath, T>, <τ_0_0, τ_0_1 where τ_0_0 : Hashable> (root $External<τ_0_0>; {{.*}} external #External.subscript) ({{.*}}) _ = \External.[x] // CHECK: keypath $KeyPath, U>, <τ_0_0, τ_0_1 where τ_0_0 : Hashable> (root $External<τ_0_1>; {{.*}} external #External.subscript) ({{.*}}) _ = \External.[x] // CHECK: keypath $KeyPath, Int>, <τ_0_0, τ_0_1 where τ_0_0 : Hashable> ( // CHECK-SAME: root $External; // CHECK-SAME: external #External.subscript // CHECK-SAME: stored_property #Local.x : $Int) ({{.*}}) _ = \External.[x].x // CHECK: keypath $KeyPath, String>, <τ_0_0, τ_0_1 where τ_0_0 : Hashable> ( // CHECK-SAME: root $External; // CHECK-SAME: external #External.subscript // CHECK-SAME: stored_property #Local.y : $String) ({{.*}}) _ = \External.[x].y // CHECK: keypath $KeyPath, ( // CHECK-SAME: root $ExternalEmptySubscript; // CHECK-SAME: external #ExternalEmptySubscript.subscript _ = \ExternalEmptySubscript.[] // CHECK: keypath $KeyPath, Int>, ( // CHECK-SAME: root $External; // CHECK-SAME: gettable_property // CHECK-SAME: external #External.privateSetProperty _ = \External.privateSetProperty // CHECK: keypath $KeyPath, Int>, ( // CHECK-SAME: root $External; // CHECK-SAME: gettable_property // CHECK-SAME: external #External.subscript _ = \External.[privateSet: 0] } // CHECK-LABEL: sil hidden [ossa] @{{.*}}testProtocolRequirement func testProtocolRequirement(_: T.Type) { // CHECK: keypath $WritableKeyPath, // CHECK-NOT: external #ExternalProto.protoReqt _ = \T.protoReqt }