// This source file is part of the Swift.org open source project
// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors

// RUN: not %target-swift-frontend %s -typecheck
func ts<edc>() -> (edc, edc -> edc) -> edc {
vu u vu.u = {
}
{
edc) {
qp  }
}
protocol ts {
}
func kj((po, c))(yx: (po, fe)) {
ml j vu = yx {
}
class kj<qp : c, u : c on qp.edc == u> : yx {
ed c {
}
func vu() -> qp {
}
o func vu() -> qp {
}
func yx<vu>() -> [c<vu>] {
}
protocol A {
}
struct cb : A {
}
struct C<gf, edc: A on gf.C == edc> {
}
protocol yx {
}
protocol kj : yx {
}
protocol c : yx {
}
protocol vu {
}
struct e : vu {
}
func u<u : kj, ut : vu on ut.ts == u> (hg: ut) {
}
func kj {
}
struct c<qp : kj> : kj
