// RUN: %target-parse-verify-swift

protocol SomeProtocol {
	typealias T
}

extension SomeProtocol where T == Optional<T> { } // expected-error{{same-type constraint '`Self`.T' == 'Optional<`Self`.T>' is recursive}}

// rdar://problem/20000145
public protocol P {
  typealias T
}
public struct S<A: P where A.T == S<A>> {}

// RUN: %target-parse-verify-swift

protocol SomeProtocol {
	typealias T
}

extension SomeProtocol where T == Optional<T> { } // expected-error{{same-type constraint '`Self`.T' == 'Optional<`Self`.T>' is recursive}}

// rdar://problem/20000145
public protocol P {
  typealias T
}
public struct S<A: P where A.T == S<A>> {}

// rdar://problem/19840527
class X<T where T == X> { // expected-error{{same-type requirement makes generic parameter 'T' non-generic}}
    var type: T { return self.dynamicType } // expected-error{{use of undeclared type 'T'}}
}

Add formerly-crashing test case from rdar://problem/19840527.
Add formerly-crashing test case from rdar://problem/19840527.

Swift SVN r29980
