// RUN: %target-swift-frontend -typecheck %s -debug-generic-signatures 2>&1 | %FileCheck %s // The Requirement Machine works with canonical types internally, so make sure // we reconstitute sugar in trivial cases before surfacing the generic // signature to the user. struct G {} // CHECK-LABEL: ExtensionDecl line={{.*}} base=G // CHECK-NEXT: Generic signature: extension G where X == Optional {} // CHECK-LABEL: ExtensionDecl line={{.*}} base=G // CHECK-NEXT: Generic signature: extension G where X == Array {} // CHECK-LABEL: ExtensionDecl line={{.*}} base=G // CHECK-NEXT: Generic signature: extension G where X == Dictionary {} // We don't do () => Swift.Void. // CHECK-LABEL: ExtensionDecl line={{.*}} base=G // CHECK-NEXT: Generic signature: extension G where X == () {} // Now make sure we do the same for superclass requirements. class C {} // CHECK-LABEL: ExtensionDecl line={{.*}} base=G // CHECK-NEXT: Generic signature: > extension G where X : C> {} // CHECK-LABEL: ExtensionDecl line={{.*}} base=G // CHECK-NEXT: Generic signature: > extension G where X : C> {} // CHECK-LABEL: ExtensionDecl line={{.*}} base=G // CHECK-NEXT: Generic signature: , Y : Hashable> extension G where X : C> {} // We don't do () => Swift.Void. // CHECK-LABEL: ExtensionDecl line={{.*}} base=G // CHECK-NEXT: Generic signature: > extension G where X : C<()> {} // Make sure we reconstitute sugar when splitting concrete // equivalence classes too. protocol P { associatedtype T where T == [U] associatedtype U } struct G2 {} // CHECK-LABEL: ExtensionDecl line={{.*}} base=G2 // CHECK-NEXT: Generic signature: extension G2 where T2.U == [Int], T1.T == T2.T {}