Commits

Slava Pestov committed 528a4a547c3
Sema: Clean up some code duplication when validating generic type signatures Every call to validateGenericTypeSignature() had the same boilerplate following; move the common logic into that function. As one might expect, each callsite had slight variants on the same underlying logic -- this makes them consistent. Also, this slightly widens the scope during which GenericTypeDecl::isValidatingGenericSignature() returns true. Interesting, that change introduces a diagnostic in an existing testcase where previously there was none: protocol P { associatedtype T } struct S<A: P where A.T == S<A>> {} While it looks like this generic signature was built correctly, in fact I think we weren't computing conformances for the substitution of 'A' in 'S<A>'. After trying small variations on the above testcase, I quickly ran into SILGen crashes, which the diagnostic now prevents. A few interesting cases still crash. See test/decl/protocol/req/recursion.swift for the gory details.