// RUN: %target-swift-frontend -Xllvm -sil-full-demangle %s -emit-silgen -enable-sil-ownership | %FileCheck %s

protocol P {
  associatedtype Assoc1
  associatedtype Assoc2
}
protocol PP: P {}
protocol PQ: P {
  associatedtype Assoc1: A
}
protocol Q {
  associatedtype Assoc0: A
}

protocol A {
  associatedtype Assoc
}

class Base: Q, A {
  typealias Assoc = Base
  typealias Assoc0 = Base
}

// CHECK-LABEL: interface_type_mangling.f1
// CHECK:                                 [[F_SIGNATURE:<A where A: interface_type_mangling.PP, A: interface_type_mangling.PQ>\(A\) -> \(\)]]
func f1<T where T: PP, T: PQ>(_ x: T) {}
// CHECK:       interface_type_mangling.f2[[F_SIGNATURE]]
func f2<T where T: PQ, T: PP>(_ x: T) {}
// CHECK:       interface_type_mangling.f3[[F_SIGNATURE]]
func f3<T where T: PQ, T: PP, T: P>(_ x: T) {}

// CHECK-LABEL: interface_type_mangling.g1
// CHECK:                                 [[G_SIGNATURE:<A, B where A: interface_type_mangling.PP, B: interface_type_mangling.PQ>\(B, y: A\) -> \(\)]]
func g1<U, T where T: PQ, U: PP>(_ x: T, y: U) {}
// CHECK:       interface_type_mangling.g2[[G_SIGNATURE]]
func g2<U, T where T: PQ, T.Assoc1: A, U: PP>(_ x: T, y: U) {}
// CHECK:       interface_type_mangling.g3[[G_SIGNATURE]]
func g3<U, T where U: PP, T: PQ, T.Assoc1: A>(_ x: T, y: U) {}

// CHECK-LABEL: interface_type_mangling.h1
// CHECK:                                 [[H_SIGNATURE:<A where A: interface_type_mangling.Base, A: interface_type_mangling.P>\(A\) -> \(\)]]
func h1<T where T: Base, T: P>(_ x: T) {}
// CHECK:       interface_type_mangling.h2[[H_SIGNATURE]]
func h2<T where T: P, T: Base>(_ x: T) {}
// CHECK:       interface_type_mangling.h3[[H_SIGNATURE]]
func h3<T where T: P, T: Base, T: AnyObject>(_ x: T) {}
// CHECK:       interface_type_mangling.h4[[H_SIGNATURE]]
func h4<T where T: P, T: Base, T: Q>(_ x: T) {}
// CHECK:       interface_type_mangling.h5[[H_SIGNATURE]]
func h5<T where T: P, T: Base, T: Q /* TODO: same type constraints , T.Assoc0 == Base*/>(_ x: T) {}

// CHECK-LABEL: interface_type_mangling.i1
// CHECK:                                 [[I_SIGNATURE:<A where A: interface_type_mangling.P, A: interface_type_mangling.Q, A.Assoc0: interface_type_mangling.Q, A.Assoc1: interface_type_mangling.P>\(A\) -> \(\)]]
func i1<T where T: P, T: Q, T.Assoc1: P, T.Assoc0: Q>(_ x: T) {}
// CHECK:       interface_type_mangling.i2[[I_SIGNATURE]]
func i2<T where T: P, T: Q, T.Assoc0: Q, T.Assoc1: P>(_ x: T) {}

// CHECK-LABEL: interface_type_mangling.j01
// CHECK:                                  [[J_SIGNATURE:<A where A: interface_type_mangling.P, A: interface_type_mangling.Q, A.Assoc0 == A.Assoc1, A.Assoc1 == A.Assoc2>\(A\) -> \(\)]]
func j01<T where T: P, T: Q, T.Assoc0 == T.Assoc1, T.Assoc1 == T.Assoc2>(_ x: T) {}
// CHECK:       interface_type_mangling.j02[[J_SIGNATURE]]
func j02<T where T: P, T: Q, T.Assoc0 == T.Assoc2, T.Assoc1 == T.Assoc2>(_ x: T) {}
// CHECK:       interface_type_mangling.j03[[J_SIGNATURE]]
func j03<T where T: P, T: Q, T.Assoc0 == T.Assoc2, T.Assoc1 == T.Assoc0>(_ x: T) {}
// CHECK:       interface_type_mangling.j04[[J_SIGNATURE]]
func j04<T where T: P, T: Q, T.Assoc1 == T.Assoc0, T.Assoc1 == T.Assoc2>(_ x: T) {}
// CHECK:       interface_type_mangling.j05[[J_SIGNATURE]]
func j05<T where T: P, T: Q, T.Assoc2 == T.Assoc0, T.Assoc1 == T.Assoc2>(_ x: T) {}
// CHECK:       interface_type_mangling.j06[[J_SIGNATURE]]
func j06<T where T: P, T: Q, T.Assoc2 == T.Assoc0, T.Assoc1 == T.Assoc0>(_ x: T) {}
// CHECK:       interface_type_mangling.j07[[J_SIGNATURE]]
func j07<T where T: P, T: Q, T.Assoc1 == T.Assoc0, T.Assoc2 == T.Assoc1>(_ x: T) {}
// CHECK:       interface_type_mangling.j08[[J_SIGNATURE]]
func j08<T where T: P, T: Q, T.Assoc2 == T.Assoc0, T.Assoc2 == T.Assoc1>(_ x: T) {}
// CHECK:       interface_type_mangling.j09[[J_SIGNATURE]]
func j09<T where T: P, T: Q, T.Assoc2 == T.Assoc0, T.Assoc0 == T.Assoc1>(_ x: T) {}
// CHECK:       interface_type_mangling.j10[[J_SIGNATURE]]
func j10<T where T: P, T: Q, T.Assoc1 == T.Assoc2, T.Assoc0 == T.Assoc1>(_ x: T) {}
// CHECK:       interface_type_mangling.j11[[J_SIGNATURE]]
func j11<T where T: P, T: Q, T.Assoc1 == T.Assoc2, T.Assoc0 == T.Assoc2>(_ x: T) {}
// CHECK:       interface_type_mangling.j12[[J_SIGNATURE]]
func j12<T where T: P, T: Q, T.Assoc1 == T.Assoc0, T.Assoc0 == T.Assoc2>(_ x: T) {}
// CHECK:       interface_type_mangling.j13[[J_SIGNATURE]]
func j13<T where T: P, T: Q, T.Assoc1 == T.Assoc2, T.Assoc1 == T.Assoc0>(_ x: T) {}
// CHECK:       interface_type_mangling.j14[[J_SIGNATURE]]
func j14<T where T: P, T: Q, T.Assoc1 == T.Assoc2, T.Assoc2 == T.Assoc0>(_ x: T) {}
// CHECK:       interface_type_mangling.j15[[J_SIGNATURE]]
func j15<T where T: P, T: Q, T.Assoc1 == T.Assoc0, T.Assoc2 == T.Assoc0>(_ x: T) {}
// CHECK:       interface_type_mangling.j16[[J_SIGNATURE]]
func j16<T where T: P, T: Q, T.Assoc2 == T.Assoc1, T.Assoc1 == T.Assoc0>(_ x: T) {}
// CHECK:       interface_type_mangling.j17[[J_SIGNATURE]]
func j17<T where T: P, T: Q, T.Assoc2 == T.Assoc1, T.Assoc2 == T.Assoc0>(_ x: T) {}
// CHECK:       interface_type_mangling.j18[[J_SIGNATURE]]
func j18<T where T: P, T: Q, T.Assoc0 == T.Assoc1, T.Assoc2 == T.Assoc0>(_ x: T) {}

struct S {}
struct G<X> {}

// CHECK-LABEL: interface_type_mangling.k01
// CHECK:                                   [[K_SIGNATURE:<A where A: interface_type_mangling.P, A.Assoc1 == interface_type_mangling.S, A.Assoc2 == interface_type_mangling.S>\(A\) -> \(\)]]
func k01<T where T: P, S == T.Assoc1, T.Assoc1 == T.Assoc2>(_ x: T) {}
// CHECK:       interface_type_mangling.k02[[K_SIGNATURE]]
func k02<T where T: P, S == T.Assoc2, T.Assoc1 == T.Assoc2>(_ x: T) {}
// CHECK:       interface_type_mangling.k03[[K_SIGNATURE]]
func k03<T where T: P, S == T.Assoc2, T.Assoc1 == S>(_ x: T) {}
// CHECK:       interface_type_mangling.k04[[K_SIGNATURE]]
func k04<T where T: P, T.Assoc1 == S, T.Assoc1 == T.Assoc2>(_ x: T) {}
// CHECK:       interface_type_mangling.k05[[K_SIGNATURE]]
func k05<T where T: P, T.Assoc2 == S, T.Assoc1 == T.Assoc2>(_ x: T) {}
// CHECK:       interface_type_mangling.k06[[K_SIGNATURE]]
func k06<T where T: P, T.Assoc2 == S, T.Assoc1 == S>(_ x: T) {}
// CHECK:       interface_type_mangling.k07[[K_SIGNATURE]]
func k07<T where T: P, T.Assoc1 == S, T.Assoc2 == T.Assoc1>(_ x: T) {}
// CHECK:       interface_type_mangling.k08[[K_SIGNATURE]]
func k08<T where T: P, T.Assoc2 == S, T.Assoc2 == T.Assoc1>(_ x: T) {}
// CHECK:       interface_type_mangling.k09[[K_SIGNATURE]]
func k09<T where T: P, T.Assoc2 == S, S == T.Assoc1>(_ x: T) {}
// CHECK:       interface_type_mangling.k10[[K_SIGNATURE]]
func k10<T where T: P, T.Assoc1 == T.Assoc2, S == T.Assoc1>(_ x: T) {}
// CHECK:       interface_type_mangling.k11[[K_SIGNATURE]]
func k11<T where T: P, T.Assoc1 == T.Assoc2, S == T.Assoc2>(_ x: T) {}
// CHECK:       interface_type_mangling.k12[[K_SIGNATURE]]
func k12<T where T: P, T.Assoc1 == S, S == T.Assoc2>(_ x: T) {}
// CHECK:       interface_type_mangling.k13[[K_SIGNATURE]]
func k13<T where T: P, T.Assoc1 == T.Assoc2, T.Assoc1 == S>(_ x: T) {}
// CHECK:       interface_type_mangling.k14[[K_SIGNATURE]]
func k14<T where T: P, T.Assoc1 == T.Assoc2, T.Assoc2 == S>(_ x: T) {}
// CHECK:       interface_type_mangling.k15[[K_SIGNATURE]]
func k15<T where T: P, T.Assoc1 == S, T.Assoc2 == S>(_ x: T) {}
// CHECK:       interface_type_mangling.k16[[K_SIGNATURE]]
func k16<T where T: P, T.Assoc2 == T.Assoc1, T.Assoc1 == S>(_ x: T) {}
// CHECK:       interface_type_mangling.k17[[K_SIGNATURE]]
func k17<T where T: P, T.Assoc2 == T.Assoc1, T.Assoc2 == S>(_ x: T) {}
// CHECK:       interface_type_mangling.k18[[K_SIGNATURE]]
func k18<T where T: P, S == T.Assoc1, T.Assoc2 == S>(_ x: T) {}

// CHECK-LABEL: interface_type_mangling.L01
// CHECK:                                  [[L_SIGNATURE:<A where A: interface_type_mangling.P, A.Assoc1 == interface_type_mangling.G<A>, A.Assoc2 == interface_type_mangling.G<A>>\(A\) -> \(\)]]
func L01<T where T: P, G<T> == T.Assoc1, T.Assoc1 == T.Assoc2>(_ x: T) {}
// CHECK:       interface_type_mangling.L02[[L_SIGNATURE]]
func L02<T where T: P, G<T> == T.Assoc2, T.Assoc1 == T.Assoc2>(_ x: T) {}
// CHECK:       interface_type_mangling.L03[[L_SIGNATURE]]
func L03<T where T: P, G<T> == T.Assoc2, T.Assoc1 == G<T>>(_ x: T) {}
// CHECK:       interface_type_mangling.L04[[L_SIGNATURE]]
func L04<T where T: P, T.Assoc1 == G<T>, T.Assoc1 == T.Assoc2>(_ x: T) {}
// CHECK:       interface_type_mangling.L05[[L_SIGNATURE]]
func L05<T where T: P, T.Assoc2 == G<T>, T.Assoc1 == T.Assoc2>(_ x: T) {}
// CHECK:       interface_type_mangling.L06[[L_SIGNATURE]]
func L06<T where T: P, T.Assoc2 == G<T>, T.Assoc1 == G<T>>(_ x: T) {}
// CHECK:       interface_type_mangling.L07[[L_SIGNATURE]]
func L07<T where T: P, T.Assoc1 == G<T>, T.Assoc2 == T.Assoc1>(_ x: T) {}
// CHECK:       interface_type_mangling.L08[[L_SIGNATURE]]
func L08<T where T: P, T.Assoc2 == G<T>, T.Assoc2 == T.Assoc1>(_ x: T) {}
// CHECK:       interface_type_mangling.L09[[L_SIGNATURE]]
func L09<T where T: P, T.Assoc2 == G<T>, G<T> == T.Assoc1>(_ x: T) {}
// CHECK:       interface_type_mangling.L10[[L_SIGNATURE]]
func L10<T where T: P, T.Assoc1 == T.Assoc2, G<T> == T.Assoc1>(_ x: T) {}
// CHECK:       interface_type_mangling.L11[[L_SIGNATURE]]
func L11<T where T: P, T.Assoc1 == T.Assoc2, G<T> == T.Assoc2>(_ x: T) {}
// CHECK:       interface_type_mangling.L12[[L_SIGNATURE]]
func L12<T where T: P, T.Assoc1 == G<T>, G<T> == T.Assoc2>(_ x: T) {}
// CHECK:       interface_type_mangling.L13[[L_SIGNATURE]]
func L13<T where T: P, T.Assoc1 == T.Assoc2, T.Assoc1 == G<T>>(_ x: T) {}
// CHECK:       interface_type_mangling.L14[[L_SIGNATURE]]
func L14<T where T: P, T.Assoc1 == T.Assoc2, T.Assoc2 == G<T>>(_ x: T) {}
// CHECK:       interface_type_mangling.L15[[L_SIGNATURE]]
func L15<T where T: P, T.Assoc1 == G<T>, T.Assoc2 == G<T>>(_ x: T) {}
// CHECK:       interface_type_mangling.L16[[L_SIGNATURE]]
func L16<T where T: P, T.Assoc2 == T.Assoc1, T.Assoc1 == G<T>>(_ x: T) {}
// CHECK:       interface_type_mangling.L17[[L_SIGNATURE]]
func L17<T where T: P, T.Assoc2 == T.Assoc1, T.Assoc2 == G<T>>(_ x: T) {}
// CHECK:       interface_type_mangling.L18[[L_SIGNATURE]]
func L18<T where T: P, G<T> == T.Assoc1, T.Assoc2 == G<T>>(_ x: T) {}

struct X {}; struct Y {}

// CHECK-LABEL: interface_type_mangling.m1
// CHECK:                                 [[M_SIGNATURE:<A, B where A: interface_type_mangling.A, B: interface_type_mangling.A, A.Assoc == interface_type_mangling.X, B.Assoc == interface_type_mangling.Y>\(A, y: B\) -> \(\)]]
func m1<T: A, U: A where T.Assoc == X, U.Assoc == Y>(_ x: T, y: U) {}
// CHECK:       interface_type_mangling.m2[[M_SIGNATURE]]
func m2<T: A, U: A where U.Assoc == Y, T.Assoc == X>(_ x: T, y: U) {}
// CHECK:       interface_type_mangling.m3[[M_SIGNATURE]]
func m3<T, U where T: A, U: A, U.Assoc == Y, T.Assoc == X>(_ x: T, y: U) {}

protocol GenericWitnessTest {
  associatedtype Tee

  func closureInGenericContext<X>(_ b: X)
  var closureInGenericPropertyContext: Tee { get }
  func twoParamsAtDepth<Y, Z>(_ x: Y, y: Z)
}

struct GenericTypeContext<T>: GenericWitnessTest {
  typealias Tee = T

  var a: T
  // CHECK-LABEL: sil private @_T023interface_type_mangling18GenericTypeContextV09closureIndF0yqd__lF3fooL_yx_qd__tr__lF
  func closureInGenericContext<U>(_ b: U) {
    func foo(_ x: T, _ y: U) { }

    foo(a, b)
  }

  // CHECK-LABEL: sil private @_T023interface_type_mangling18GenericTypeContextV09closureInd8PropertyF0xvg3fooL_xylF
  var closureInGenericPropertyContext: T {
    func foo() -> T { }

    return foo()
  }

  // FIXME: Demangling for generic params at depth is wrong.
  // CHECK-LABEL: twoParamsAtDepth<A, B>(A1, y: B1) -> ()
  // CHECK-LABEL: sil hidden @_T023interface_type_mangling18GenericTypeContextV16twoParamsAtDepthyqd___qd_0_1ytr0_lF
  func twoParamsAtDepth<A, B>(_ x: A, y: B) {}
}

// CHECK-LABEL: protocol witness for interface_type_mangling.GenericWitnessTest.closureInGenericContext<A>(A1) -> () in conformance <A> interface_type_mangling.GenericTypeContext<A> : interface_type_mangling.GenericWitnessTest in interface_type_mangling
// CHECK-LABEL: @_T023interface_type_mangling18GenericTypeContextVyxGAA0D11WitnessTestAAlAaEP09closureIndF0yqd__lFTW

// CHECK-LABEL: protocol witness for interface_type_mangling.GenericWitnessTest.closureInGenericPropertyContext.getter : A.Tee in conformance <A> interface_type_mangling.GenericTypeContext<A> : interface_type_mangling.GenericWitnessTest in interface_type_mangling
// CHECK-LABEL: @_T023interface_type_mangling18GenericTypeContextVyxGAA0D11WitnessTestAAlAaEP09closureInd8PropertyF03TeeQzvgTW

// CHECK-LABEL: protocol witness for interface_type_mangling.GenericWitnessTest.twoParamsAtDepth<A, B>(A1, y: B1) -> () in conformance <A> interface_type_mangling.GenericTypeContext<A> : interface_type_mangling.GenericWitnessTest in interface_type_mangling
// CHECK-LABEL: @_T023interface_type_mangling18GenericTypeContextVyxGAA0D11WitnessTestAAlAaEP16twoParamsAtDepthyqd___qd_0_1ytr0_lFTW
