
// RUN: %empty-directory(%t)
// -- Convert <i32 0x...> constants to decimal constants that LLVM will print
// RUN: %utils/chex.py < %s > %t/keypaths.sil
// RUN: %target-swift-frontend -module-name keypaths -emit-ir %s | %FileCheck %t/keypaths.sil --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize --check-prefix=CHECK-%target-os

sil_stage canonical
import Swift

struct S: Hashable {
  var x: Int
  let y: String
  var z: C
  var reabstracted: () -> ()

  var hashValue: Int { get }
  static func ==(_: S, _: S) -> Bool
}
class C: Hashable {
  final var x: Int
  final let y: String
  final var z: S
  var w: Int { get set }

  init()

  var hashValue: Int { get }
  static func ==(_: C, _: C) -> Bool
}

struct G<T> {
  var x: T
  subscript<U: Hashable>(x: U) -> T { get set }
}

sil_vtable C {}

// CHECK: %TSi = type <{ [[WORD:i.*]] }>

// -- %a: S.x
// CHECK: [[KP_A:@keypath.*]] = private global <{ {{.*}} }> <{
// CHECK-SAME: [[WORD]] 0,
// CHECK-SAME: %swift.type* (i8*)*
// CHECK-SAME: %swift.type* (i8*)*
//               -- instantiable in-line, size 4
// CHECK-SAME: <i32 0x8000_0004>,
// CHECK-64-SAME: [4 x i8] zeroinitializer,
// -- offset of S.x
// CHECK-SAME: i32 0 }>

// -- %b: S.y
// CHECK: [[KP_B:@keypath.*]] = private global <{ {{.*}} }> <{
// CHECK-SAME: [[WORD]] 0,
// CHECK-SAME: %swift.type* (i8*)*
// CHECK-SAME: %swift.type* (i8*)*
//               -- instantiable in-line, size 4
// CHECK-SAME: <i32 0x8000_0004>,
// CHECK-64-SAME: [4 x i8] zeroinitializer,
// -- offset of S.y
// CHECK-32-SAME: i32 4 }>
// CHECK-64-SAME: i32 8 }>

// -- %c: S.z
// CHECK: [[KP_C:@keypath.*]] = private global <{ {{.*}} }> <{
// CHECK-SAME: [[WORD]] 0,
// CHECK-SAME: %swift.type* (i8*)*
// CHECK-SAME: %swift.type* (i8*)*
//               -- instantiable in-line, size 4
// CHECK-SAME: <i32 0x8000_0004>,
// CHECK-64-SAME: [4 x i8] zeroinitializer,
// -- offset of S.z
// CHECK-32-SAME: i32 16 }>
// CHECK-64-SAME: i32 24 }>

// -- %d: C.x
// CHECK: [[KP_D:@keypath.*]] = private global <{ {{.*}} }> <{
// CHECK-SAME: [[WORD]] 0,
// CHECK-SAME: %swift.type* (i8*)*
// CHECK-SAME: %swift.type* (i8*)*
//               -- instantiable in-line, size 4
// CHECK-SAME: <i32 0x8000_0004>,
// CHECK-64-SAME: [4 x i8] zeroinitializer,
// -- 0x0200_0000 (class) + offset of C.x
// CHECK-32-SAME: <i32 0x0200_0008> }>
// CHECK-64-SAME: <i32 0x0200_0010> }>

// -- %e: C.y
// CHECK: [[KP_E:@keypath.*]] = private global <{ {{.*}} }> <{
// CHECK-SAME: [[WORD]] 0,
// CHECK-SAME: %swift.type* (i8*)*
// CHECK-SAME: %swift.type* (i8*)*
//               -- instantiable in-line, size 4
// CHECK-SAME: <i32 0x8000_0004>,
// CHECK-64-SAME: [4 x i8] zeroinitializer,
// -- 0x0200_0000 (class) + offset of C.y
// CHECK-32-SAME: <i32 0x0200_000c> }>
// CHECK-64-SAME: <i32 0x0200_0018> }>

// -- %f: C.z
// CHECK: [[KP_F:@keypath.*]] = private global <{ {{.*}} }> <{
// CHECK-SAME: [[WORD]] 0,
// CHECK-SAME: %swift.type* (i8*)*
// CHECK-SAME: %swift.type* (i8*)*
//               -- instantiable in-line, size 4
// CHECK-SAME: <i32 0x8000_0004>,
// CHECK-64-SAME: [4 x i8] zeroinitializer,
// -- 0x0200_0000 (class) + offset of C.z
// CHECK-32-SAME: <i32 0x0200_0018> }>
// CHECK-64-SAME: <i32 0x0200_0028> }>

// -- %g: S.z.x
// CHECK: [[KP_G:@keypath.*]] = private global <{ {{.*}} }> <{
// CHECK-SAME: [[WORD]] 0,
// CHECK-SAME: %swift.type* (i8*)*
// CHECK-SAME: %swift.type* (i8*)*
//                  -- instantiable in-line, size 12
// CHECK-32-SAME: <i32 0x8000_000c>,
//                  -- instantiable in-line, size 20
// CHECK-64-SAME: <i32 0x8000_0014>,
// CHECK-64-SAME: [4 x i8] zeroinitializer,
// -- offset of S.z
// CHECK-32-SAME: i32 16,
// CHECK-64-SAME: i32 24,
// CHECK-64-SAME: [4 x i8] zeroinitializer,
// CHECK: %swift.type* (i8*)*
// -- 0x0200_0000 (class) + offset of C.x
// CHECK-32-SAME: <i32 0x0200_0008> }>
// CHECK-64-SAME: <i32 0x0200_0010> }>

// -- %h: C.z.x
// CHECK: [[KP_H:@keypath.*]] = private global <{ {{.*}} }> <{
// CHECK-SAME: [[WORD]] 0,
// CHECK-SAME: %swift.type* (i8*)*
// CHECK-SAME: %swift.type* (i8*)*
//                  -- instantiable in-line, size 12
// CHECK-32-SAME: <i32 0x8000_000c>,
//                  -- instantiable in-line, size 20
// CHECK-64-SAME: <i32 0x8000_0014>,
// CHECK-64-SAME: [4 x i8] zeroinitializer,
// -- 0x0200_0000 (class) + offset of C.z
// CHECK-32-SAME: <i32 0x0200_0018>,
// CHECK-64-SAME: <i32 0x0200_0028>,
// CHECK-64-SAME: [4 x i8] zeroinitializer,
// CHECK: %swift.type* (i8*)*
// -- offset of S.x
// CHECK-SAME: i32 0 }>

// -- %k: computed
// CHECK: [[KP_K:@keypath.*]] = private global <{ {{.*}} }> <{
// CHECK-SAME: [[WORD]] 0,
// CHECK-SAME: %swift.type* (i8*)*
// CHECK-SAME: %swift.type* (i8*)*
//              -- instantiable in-line, size 24
// CHECK-64-SAME: <i32 0x8000_0018>,
// CHECK-64-SAME: [4 x i8] zeroinitializer,
//              -- instantiable in-line, size 12
// CHECK-32-SAME: <i32 0x8000_000c>,
// -- computed, get-only, identified by function pointer, no args
// CHECK-SAME: <i32 0x0100_0000>,
// CHECK-64-SAME: [4 x i8] zeroinitializer,
// CHECK-SAME: void ()* @k_id,
// CHECK-SAME: void (%TSi*, %T8keypaths1SV*)* @k_get }>

// -- %l: computed
// CHECK: [[KP_L:@keypath.*]] = private global <{ {{.*}} }> <{
// CHECK-SAME: [[WORD]] 0,
// CHECK-SAME: %swift.type* (i8*)*
// CHECK-SAME: %swift.type* (i8*)*
//              -- instantiable in-line, size 32
// CHECK-64-SAME: <i32 0x8000_0020>,
// CHECK-64-SAME: [4 x i8] zeroinitializer,
//              -- instantiable in-line, size 16
// CHECK-32-SAME: <i32 0x8000_0010>,
// -- computed, settable, nonmutating, identified by vtable, no args
// CHECK-SAME: <i32 0x0150_0000>,
// CHECK-64-SAME: [4 x i8] zeroinitializer,
// CHECK-SAME: [[WORD]]
// CHECK-SAME: void (%TSi*, %T8keypaths1CC**)* @l_get,
// CHECK-SAME: void (%TSi*, %T8keypaths1CC**)* @l_set }>

// -- %m: computed
// CHECK: [[KP_M:@keypath.*]] = private global <{ {{.*}} }> <{
// CHECK-SAME: [[WORD]] 0,
// CHECK-SAME: %swift.type* (i8*)*
// CHECK-SAME: %swift.type* (i8*)*
//              -- instantiable in-line, size 32
// CHECK-64-SAME: <i32 0x8000_0020>,
// CHECK-64-SAME: [4 x i8] zeroinitializer,
//              -- instantiable in-line, size 16
// CHECK-32-SAME: <i32 0x8000_0010>,
// -- computed, settable, nonmutating, identified by property offset, no args
// CHECK-SAME: <i32 0x01e0_0000>,
// CHECK-64-SAME: [4 x i8] zeroinitializer,
// CHECK-SAME: [[WORD]]
// CHECK-SAME: void (%swift.function*, %T8keypaths1SV*)* @m_get,
// CHECK-SAME: void (%swift.function*, %T8keypaths1SV*)* @m_set }>


// -- %i: Gen<A>.x
// CHECK: [[KP_I:@keypath.*]] = private global <{ {{.*}} }> <{
// CHECK-SAME: [[WORD]] 0,
// CHECK-SAME: %swift.type* (i8*)* [[I_GET_GEN_A_A:@[a-z_.0-9]+]],
// CHECK-SAME: %swift.type* (i8*)* [[I_GET_A:@[a-z_.0-9]+]],
//             -- size 8
// CHECK-SAME: i32 8,
// CHECK-64-SAME: [4 x i8] zeroinitializer,
//             -- struct with runtime-resolved offset
// CHECK-SAME: <i32 0x00fffffe>,
// CHECK-32-SAME: i32 16 }>
// CHECK-64-SAME: i32 32 }>

// -- %j: Gen<A>.y
// CHECK: [[KP_J:@keypath.*]] = private global <{ {{.*}} }> <{
// CHECK-SAME: [[WORD]] 0,
// CHECK-SAME: %swift.type* (i8*)* [[J_GET_GEN_A_A:@[a-z_.0-9]+]],
// CHECK-SAME: %swift.type* (i8*)* [[J_GET_A:@[a-z_.0-9]+]],
//             -- size 8
// CHECK-SAME: i32 8,
// CHECK-64-SAME: [4 x i8] zeroinitializer,
//             -- struct with runtime-resolved offset
// CHECK-SAME: <i32 0x00fffffe>,
// CHECK-32-SAME: i32 20 }>
// CHECK-64-SAME: i32 36 }>

// CHECK-LABEL: define{{( protected)?}} swiftcc void @stored_property_fixed_offsets()
sil @stored_property_fixed_offsets : $@convention(thin) () -> () {
entry:
  // CHECK: call %swift.refcounted* @swift_getKeyPath(i8* bitcast ({{.*}} [[KP_A]] to i8*), i8* undef)
  %a = keypath $KeyPath<S, Int>, (root $S; stored_property #S.x : $Int)
  // CHECK: call %swift.refcounted* @swift_getKeyPath(i8* bitcast ({{.*}} [[KP_B]] to i8*), i8* undef)
  %b = keypath $KeyPath<S, String>, (root $S; stored_property #S.y : $String)
  // CHECK: call %swift.refcounted* @swift_getKeyPath(i8* bitcast ({{.*}} [[KP_C]] to i8*), i8* undef)
  %c = keypath $KeyPath<S, C>, (root $S; stored_property #S.z : $C)

  // CHECK: call %swift.refcounted* @swift_getKeyPath(i8* bitcast ({{.*}} [[KP_D]] to i8*), i8* undef)
  %d = keypath $KeyPath<C, Int>, (root $C; stored_property #C.x : $Int)
  // CHECK: call %swift.refcounted* @swift_getKeyPath(i8* bitcast ({{.*}} [[KP_E]] to i8*), i8* undef)
  %e = keypath $KeyPath<C, String>, (root $C; stored_property #C.y : $String)
  // CHECK: call %swift.refcounted* @swift_getKeyPath(i8* bitcast ({{.*}} [[KP_F]] to i8*), i8* undef)
  %f = keypath $KeyPath<C, S>, (root $C; stored_property #C.z : $S)

  // CHECK: call %swift.refcounted* @swift_getKeyPath(i8* bitcast ({{.*}} [[KP_G]] to i8*), i8* undef)
  %g = keypath $KeyPath<S, Int>, (root $S; stored_property #S.z : $C; stored_property #C.x : $Int)
  // CHECK: call %swift.refcounted* @swift_getKeyPath(i8* bitcast ({{.*}} [[KP_H]] to i8*), i8* undef)
  %h = keypath $KeyPath<C, Int>, (root $C; stored_property #C.z : $S; stored_property #S.x : $Int)

  %k = keypath $KeyPath<S, Int>, (root $S; gettable_property $Int, id @k_id : $@convention(thin) () -> (), getter @k_get : $@convention(thin) (@in_guaranteed S) -> @out Int)
  %l = keypath $KeyPath<C, Int>, (root $C; settable_property $Int, id #C.w!getter.1, getter @l_get : $@convention(thin) (@in_guaranteed C) -> @out Int, setter @l_set : $@convention(thin) (@in_guaranteed Int, @in_guaranteed C) -> ())
  %m = keypath $KeyPath<S, () -> ()>, (root $S; settable_property $() -> (), id ##S.reabstracted, getter @m_get : $@convention(thin) (@in_guaranteed S) -> @out @callee_guaranteed (@in_guaranteed ()) -> @out (), setter @m_set : $@convention(thin) (@in_guaranteed @callee_guaranteed (@in_guaranteed ()) -> @out (), @inout S) -> ())

  return undef : $()
}

sil @k_id : $@convention(thin) () -> ()
sil @k_get : $@convention(thin) (@in_guaranteed S) -> @out Int

sil @l_get : $@convention(thin) (@in_guaranteed C) -> @out Int
sil @l_set : $@convention(thin) (@in_guaranteed Int, @in_guaranteed C) -> ()

sil @m_get : $@convention(thin) (@in_guaranteed S) -> @out @callee_guaranteed (@in_guaranteed ()) -> @out ()
sil @m_set : $@convention(thin) (@in_guaranteed @callee_guaranteed (@in_guaranteed ()) -> @out (), @inout S) -> ()

struct Gen<T, U> {
  var x: T
  var y: U
}

struct Foo<T> {
  var foo: T
}

// CHECK-LABEL: define{{( protected)?}} swiftcc void @stored_property_generics(%swift.type* %T, %swift.type* %U)
sil @stored_property_generics : $@convention(thin) <T, U> () -> () {
entry:
  // CHECK: [[PTR:%.*]] = bitcast i8* [[ARGS:%.*]] to
  // CHECK: store %swift.type* %T, %swift.type** [[PTR]]
  // CHECK: call %swift.refcounted* @swift_getKeyPath(i8* bitcast ({{.*}} [[KP_I]] to i8*), i8* [[ARGS]])
  %i = keypath $KeyPath<Gen<T,T>, T>, <A> (root $Gen<A, A>; stored_property #Gen.x : $A) <T>

  // CHECK: [[PTR:%.*]] = bitcast i8* [[ARGS:%.*]] to
  // CHECK: store %swift.type* %U, %swift.type** [[PTR]]
  // CHECK: call %swift.refcounted* @swift_getKeyPath(i8* bitcast ({{.*}} [[KP_J]] to i8*), i8* [[ARGS]])
  %j = keypath $KeyPath<Gen<U,U>, U>, <A> (root $Gen<A, A>; stored_property #Gen.y : $A) <U>

  // CHECK: [[PTR:%.*]] = bitcast i8* [[ARGS:%.*]] to
  // CHECK: [[T0:%.*]] = call swiftcc %swift.metadata_response @"$S8keypaths3FooVMa"([[WORD]] 0, %swift.type* %T)
  // CHECK: [[FOO_T:%.*]] = extractvalue %swift.metadata_response [[T0]], 0
  // CHECK: store %swift.type* [[FOO_T]], %swift.type** [[PTR]]
  // CHECK: call %swift.refcounted* @swift_getKeyPath(i8* bitcast ({{.*}} [[KP_I]] to i8*), i8* [[ARGS]])
  %i2 = keypath $KeyPath<Gen<Foo<T>,Foo<T>>, Foo<T>>, <A> (root $Gen<A, A>; stored_property #Gen.x : $A) <Foo<T>>

  return undef : $()
}

// CHECK: define private %swift.type* [[I_GET_GEN_A_A]](i8*)
// CHECK:   [[BUF:%.*]] = bitcast i8* %0
// CHECK:   [[A:%.*]] = load %swift.type*, %swift.type** [[BUF]]
// CHECK:   [[T0:%.*]] = call swiftcc %swift.metadata_response @"$S8keypaths3GenVMa"([[WORD]] 0, %swift.type* [[A]], %swift.type* [[A]])
// CHECK:   [[GEN:%.*]] = extractvalue %swift.metadata_response [[T0]], 0
// CHECK:   ret %swift.type* [[GEN]]


// CHECK: define private %swift.type* [[I_GET_A]](i8*)
// CHECK:   [[BUF:%.*]] = bitcast i8* %0
// CHECK:   [[A:%.*]] = load %swift.type*, %swift.type** [[BUF]]
// CHECK:   ret %swift.type* [[A]]

// CHECK-LABEL: define{{( protected)?}} swiftcc void @computed_property_generics
sil @computed_property_generics : $@convention(thin) <T, U> () -> () {
entry:
  %n = keypath $WritableKeyPath<T, U>, <UUU, TTT> (root $TTT; settable_property $UUU, id @n_get : $@convention(thin) <UU, TT> (@in_guaranteed TT) -> @out UU, getter @n_get : $@convention(thin) <UU, TT> (@in_guaranteed TT) -> @out UU, setter @n_set : $@convention(thin) <UU, TT> (@in_guaranteed UU, @in_guaranteed TT) -> ()) <U, T>

  return undef : $()
}

sil @n_get : $@convention(thin) <UU, TT> (@in_guaranteed TT) -> @out UU
sil @n_set : $@convention(thin) <UU, TT> (@in_guaranteed UU, @in_guaranteed TT) -> ()

sil @computed_property_indices : $@convention(thin) (C, S, C, S, C, S) -> () {
entry(%0 : $C, %1 : $S, %2 : $C, %3 : $S, %4 : $C, %5 : $S):
  %o = keypath $WritableKeyPath<S, C>, (
    root $S;
    settable_property $C,
      id @o_get : $@convention(thin) (@in_guaranteed S, UnsafeRawPointer) -> @out C,
      getter @o_get : $@convention(thin) (@in_guaranteed S, UnsafeRawPointer) -> @out C,
      setter @o_set : $@convention(thin) (@in_guaranteed C, @in_guaranteed S, UnsafeRawPointer) -> (),
      indices [%$0 : $C : $C],
      indices_equals @o_equals : $@convention(thin) (UnsafeRawPointer, UnsafeRawPointer) -> Bool,
      indices_hash @o_hash : $@convention(thin) (UnsafeRawPointer) -> Int
  ) (%0)
  %p = keypath $WritableKeyPath<S, C>, (
    root $S;
    settable_property $C,
      id @o_get : $@convention(thin) (@in_guaranteed S, UnsafeRawPointer) -> @out C,
      getter @o_get : $@convention(thin) (@in_guaranteed S, UnsafeRawPointer) -> @out C,
      setter @o_set : $@convention(thin) (@in_guaranteed C, @in_guaranteed S, UnsafeRawPointer) -> (),
      indices [%$0 : $S : $S, %$1 : $C : $C],
      indices_equals @o_equals : $@convention(thin) (UnsafeRawPointer, UnsafeRawPointer) -> Bool,
      indices_hash @o_hash : $@convention(thin) (UnsafeRawPointer) -> Int
  ) (%1, %2)
  %r = keypath $WritableKeyPath<S, S>, (
    root $S;
    settable_property $C,
      id @o_get : $@convention(thin) (@in_guaranteed S, UnsafeRawPointer) -> @out C,
      getter @o_get : $@convention(thin) (@in_guaranteed S, UnsafeRawPointer) -> @out C,
      setter @o_set : $@convention(thin) (@in_guaranteed C, @in_guaranteed S, UnsafeRawPointer) -> (),
      indices [%$0 : $S : $S, %$1 : $C : $C],
      indices_equals @o_equals : $@convention(thin) (UnsafeRawPointer, UnsafeRawPointer) -> Bool,
      indices_hash @o_hash : $@convention(thin) (UnsafeRawPointer) -> Int;
    settable_property $S,
      id @r_get : $@convention(thin) (@in_guaranteed C, UnsafeRawPointer) -> @out S,
      getter @r_get : $@convention(thin) (@in_guaranteed C, UnsafeRawPointer) -> @out S,
      setter @r_set : $@convention(thin) (@in_guaranteed S, @in_guaranteed C, UnsafeRawPointer) -> (),
      indices [%$2 : $S : $S],
      indices_equals @o_equals : $@convention(thin) (UnsafeRawPointer, UnsafeRawPointer) -> Bool,
      indices_hash @o_hash : $@convention(thin) (UnsafeRawPointer) -> Int
  ) (%3, %4, %5)

  return undef : $()
}

sil @o_get : $@convention(thin) (@in_guaranteed S, UnsafeRawPointer) -> @out C
sil @o_set : $@convention(thin) (@in_guaranteed C, @in_guaranteed S, UnsafeRawPointer) -> ()
sil @o_equals : $@convention(thin) (UnsafeRawPointer, UnsafeRawPointer) -> Bool
sil @o_hash : $@convention(thin) (UnsafeRawPointer) -> Int

sil @r_get : $@convention(thin) (@in_guaranteed C, UnsafeRawPointer) -> @out S
sil @r_set : $@convention(thin) (@in_guaranteed S, @in_guaranteed C, UnsafeRawPointer) -> ()

sil @generic_computed_property_indices : $@convention(thin) <A: Hashable, B: Hashable> (@in_guaranteed A, @in_guaranteed B, @in_guaranteed A, @in_guaranteed B, @in_guaranteed A, @in_guaranteed B) -> () {
entry(%0 : $*A, %1 : $*B, %2 : $*A, %3 : $*B, %4 : $*A, %5 : $*B):
  %s = keypath $WritableKeyPath<A, B>, <X: Hashable, Y: Hashable> (
    root $X;
    settable_property $Y,
      id @s_get : $@convention(thin) <T: Hashable, U: Hashable> (@in_guaranteed T, UnsafeRawPointer) -> @out U,
      getter @s_get : $@convention(thin) <T: Hashable, U: Hashable> (@in_guaranteed T, UnsafeRawPointer) -> @out U,
      setter @s_set : $@convention(thin) <T: Hashable, U: Hashable> (@in_guaranteed U, @in_guaranteed T, UnsafeRawPointer) -> (),
      indices [%$0 : $X : $*X],
      indices_equals @s_equals : $@convention(thin) <T: Hashable, U: Hashable> (UnsafeRawPointer, UnsafeRawPointer) -> Bool,
      indices_hash @s_hash : $@convention(thin) <T: Hashable, U: Hashable> (UnsafeRawPointer) -> Int
  ) <A, B> (%0)
  %t = keypath $WritableKeyPath<A, B>, <X: Hashable, Y: Hashable> (
    root $X;
    settable_property $Y,
      id @s_get : $@convention(thin) <T: Hashable, U: Hashable> (@in_guaranteed T, UnsafeRawPointer) -> @out U,
      getter @s_get : $@convention(thin) <T: Hashable, U: Hashable> (@in_guaranteed T, UnsafeRawPointer) -> @out U,
      setter @s_set : $@convention(thin) <T: Hashable, U: Hashable> (@in_guaranteed U, @in_guaranteed T, UnsafeRawPointer) -> (),
      indices [%$0 : $Y : $*Y, %$1 : $X : $*X],
      indices_equals @s_equals : $@convention(thin) <T: Hashable, U: Hashable> (UnsafeRawPointer, UnsafeRawPointer) -> Bool,
      indices_hash @s_hash : $@convention(thin) <T: Hashable, U: Hashable> (UnsafeRawPointer) -> Int
  ) <A, B> (%1, %2)
  %v = keypath $WritableKeyPath<A, A>, <X: Hashable, Y: Hashable> (
    root $X;
    settable_property $Y,
      id @s_get : $@convention(thin) <T: Hashable, U: Hashable> (@in_guaranteed T, UnsafeRawPointer) -> @out U,
      getter @s_get : $@convention(thin) <T: Hashable, U: Hashable> (@in_guaranteed T, UnsafeRawPointer) -> @out U,
      setter @s_set : $@convention(thin) <T: Hashable, U: Hashable> (@in_guaranteed U, @in_guaranteed T, UnsafeRawPointer) -> (),
      indices [%$0 : $Y : $*Y, %$1 : $X : $*X],
      indices_equals @s_equals : $@convention(thin) <T: Hashable, U: Hashable> (UnsafeRawPointer, UnsafeRawPointer) -> Bool,
      indices_hash @s_hash : $@convention(thin) <T: Hashable, U: Hashable> (UnsafeRawPointer) -> Int;
    settable_property $X,
      id @v_get : $@convention(thin) <T: Hashable, U: Hashable> (@in_guaranteed U, UnsafeRawPointer) -> @out T,
      getter @v_get : $@convention(thin) <T: Hashable, U: Hashable> (@in_guaranteed U, UnsafeRawPointer) -> @out T,
      setter @v_set : $@convention(thin) <T: Hashable, U: Hashable> (@in_guaranteed T, @in_guaranteed U, UnsafeRawPointer) -> (),
      indices [%$2 : $Y : $*Y],
      indices_equals @s_equals : $@convention(thin) <T: Hashable, U: Hashable> (UnsafeRawPointer, UnsafeRawPointer) -> Bool,
      indices_hash @s_hash : $@convention(thin) <T: Hashable, U: Hashable> (UnsafeRawPointer) -> Int
  ) <A, B> (%3, %4, %5)

  return undef : $()
}

sil @generic_external : $@convention(thin) <A: Hashable, B: Hashable> (@in_guaranteed A, @in_guaranteed B, @in_guaranteed A, @in_guaranteed B, @in_guaranteed A, @in_guaranteed B) -> () {
entry(%0 : $*A, %1 : $*B, %2 : $*A, %3 : $*B, %4 : $*A, %5 : $*B):
  %t = keypath $KeyPath<G<B>, B>, <Z> (
    root $G<Z>;
    external #G.x<Z> : $Z
  ) <B>

  %u = keypath $KeyPath<G<A>, A>, <X: Hashable, Y: Hashable> (
    root $G<Y>;
    external #G.subscript<Y, X> [%$0 : $X : $*X] : $Y,
      indices_equals @s_equals : $@convention(thin) <A: Hashable, B: Hashable> (UnsafeRawPointer, UnsafeRawPointer) -> Bool,
      indices_hash @s_hash : $@convention(thin) <A: Hashable, B: Hashable> (UnsafeRawPointer) -> Int
  ) <B, A> (%1)

  %v = keypath $KeyPath<G<G<B>>, B>, <X: Hashable, Y: Hashable> (
    root $G<G<X>>;
    external #G.subscript<G<X>, Y> [%$1 : $Y : $*Y] : $G<X>,
      indices_equals @s_equals : $@convention(thin) <A: Hashable, B: Hashable> (UnsafeRawPointer, UnsafeRawPointer) -> Bool,
      indices_hash @s_hash : $@convention(thin) <A: Hashable, B: Hashable> (UnsafeRawPointer) -> Int;
    external #G.subscript<X, X> [%$0 : $X : $*X] : $X,
      indices_equals @s_equals : $@convention(thin) <A: Hashable, B: Hashable> (UnsafeRawPointer, UnsafeRawPointer) -> Bool,
      indices_hash @s_hash : $@convention(thin) <A: Hashable, B: Hashable> (UnsafeRawPointer) -> Int
  ) <B, A> (%3, %4)

  return undef : $()
}

sil @s_get : $@convention(thin) <A: Hashable, B: Hashable> (@in_guaranteed A, UnsafeRawPointer) -> @out B
sil @s_set : $@convention(thin) <A: Hashable, B: Hashable> (@in_guaranteed B, @in_guaranteed A, UnsafeRawPointer) -> ()
sil @s_equals : $@convention(thin) <A: Hashable, B: Hashable> (UnsafeRawPointer, UnsafeRawPointer) -> Bool
sil @s_hash : $@convention(thin) <A: Hashable, B: Hashable> (UnsafeRawPointer) -> Int

sil @v_get : $@convention(thin) <A: Hashable, B: Hashable> (@in_guaranteed B, UnsafeRawPointer) -> @out A
sil @v_set : $@convention(thin) <A: Hashable, B: Hashable> (@in_guaranteed A, @in_guaranteed B, UnsafeRawPointer) -> ()
