// RUN: %target-typecheck-verify-swift // RUN: %target-swift-frontend -typecheck %s -debug-generic-signatures 2>&1 | %FileCheck %s protocol P { associatedtype T } struct S : P { typealias T = S } // CHECK-LABEL: concrete_conformances_in_protocol.(file).R0@ // CHECK-LABEL: Requirement signature: protocol R0 { associatedtype A where A : P, A == S } //// struct G : P {} // CHECK-LABEL: concrete_conformances_in_protocol.(file).R1@ // CHECK-LABEL: Requirement signature: > protocol R1 { associatedtype A associatedtype B where B : P, B == G } // CHECK-LABEL: concrete_conformances_in_protocol.(file).R2@ // CHECK-LABEL: Requirement signature: > protocol R2 { associatedtype A where A : P, A == G associatedtype B } //// protocol PP { associatedtype T : P } struct GG : PP {} // CHECK-LABEL: concrete_conformances_in_protocol.(file).RR3@ // CHECK-LABEL: Requirement signature: > protocol RR3 { associatedtype A : P associatedtype B where B : PP, B == GG } // CHECK-LABEL: concrete_conformances_in_protocol.(file).RR4@ // CHECK-LABEL: Requirement signature: , Self.[RR4]B : P> protocol RR4 { associatedtype A where A : PP, A == GG associatedtype B : P } // CHECK-LABEL: concrete_conformances_in_protocol.(file).RR5@ // CHECK-LABEL: Requirement signature: > protocol RR5 { associatedtype A : PP associatedtype B where B : PP, B == GG } // CHECK-LABEL: concrete_conformances_in_protocol.(file).RR6@ // CHECK-LABEL: Requirement signature: , Self.[RR6]B : PP> protocol RR6 { associatedtype A where A : PP, A == GG associatedtype B : PP } protocol P1 { associatedtype T : P1 } struct GGG : P1 { typealias T = GGG> } // CHECK-LABEL: concrete_conformances_in_protocol.(file).P2@ // CHECK-LABEL: Requirement signature: , Self.[P2]U : P1> protocol P2 { associatedtype T : P1 where T == GGG associatedtype U : P1 }