// 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
protocol a {
}
protocol b : a {
}
protocol c : a {
}
protocol d {
  typealias f = a
}
struct e : d {
  typealias f = b
}
func i<j : b, k : d where k.f == j> (n: k) {
}
func i<l : d where l.f = 0) {
}
let ch : c, i : c where }
}
f
e)
func f<g>() -> (g, g -> g) -> g {
   d j d.i = {
}
 {
   g) {
        c
    }
}
imporsuper.init()
ny, Any) -> Any) -> Any)) -> Any {
    return z({
        (p: Any, q:Any) -> Any in
        return p
    })
}
b(a(1, a(2, 3)))
func prefix(with: String) -> <T>(() -> T return "\(with): \((a }
}
func some<S: Sequen: Int -> Int = {
   
 {
   g) {
        h  }
}
protocol f {
   class func i()
}
class d: f{  class func i {}[]
}
potoco: a {
}
pr
struct A<T> {
    let a: [(T, () -> ())] = []
}
protocol A {
    func c() -> String
}
class B {
    func d() -> String {
        return 1
protocol A {
    typealias B
}
class C<D{
}
f(true as Boolean)
class a {
    typealias b = b
}
func a<T>() -> (T, T -> T) -> T {
    var b: ((T, T -> T) -> T)!
    return b
}
f
e)
func f<g>()s : S) -> T? {
    for (mx : T?) in xs {
        if let x = mx {
    1 as a=1
s}
f
e)
func f<g>() -> (g, g -> g) -> g {
   d j d.i = {
}
 {
   g) {
        h  }
}
protocol f {
   class func i()
}
class d: f{  class func i {}
protocol A {
    typealias B
}
class C<D> {
    init <A: A where A.B == D>(e: A.B) {
    }
}
func a<T>() -> (T, T -> T) -> T {
    var b: ((T, T -> T) -> T)!
enum c {
        func e
        var _ = e
    }
}
struct A<T> {
    let a: alias g
}
func prefix(with: String) -> c-> c { class d:b class b
