   typealias Parent = P
   typealias Delegate = D
 
+  // Here if we resolve Proxy.Parent and Proxy.Delegate to the typealiases,
+  // we get vacuous requirements 'P == P' and 'D == D'. By keeping both
+  // the substituted and original requirement, we ensure that the
+  // unrelated associated type 'Parent' is constrained instead.
+
   // CHECK-LABEL: .GenericDelegateProxy.init(_:)@
   // CHECK-NEXT: <P, D, Proxy where P == Proxy.[DelegateProxyType]Parent, D == Proxy.[DelegateProxyType]Delegate, Proxy : GenericDelegateProxy<P, D>, Proxy : DelegateProxyType>
   init<Proxy: DelegateProxyType>(_: Proxy.Type)

protocol DelegateProxyType {
  associatedtype Parent : AnyObject
  associatedtype Delegate
}
// RUN: %target-swift-frontend -typecheck %s -debug-generic-signatures -requirement-machine-inferred-signatures=on 2>&1 | %FileCheck %s

// Another GenericSignatureBuilder oddity, reduced from RxSwift.
//
