// 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 e<l {
j {
}
func p(l: Any, g: Any) -> (((Any, Any) -> Any) -> Any) {
return {
(p: (Any, Any) -> Any) -> Any in
func n<n : l,) {
}
j j j.o = {
t) {
}
protocol o {
}
class j: o{  class func o {}
e o<j : u> {
}
func n<q>() {
b b {
}
}
func n(j: Any, t: Any) -> (((Any, Any) -> Any) -> Any) {
k {
}
}
}
struct c<e> {
}
func b<c {
enum b {
class A : NSManagedObject {
func b<T: A>() -> [T] {
}
}
class d<c>: NSObject {
init(b: c) {
}
}
}
class f<p : k, p : k where p.n == p> : n {
}
class f<p, p> {
}
protocol k {
}
o: i where k.j == f> {l func k() { }
}
func k<o {
enum k {
() {
}
}
var f1: Int -> Int = {
}
}
snit(foo: T) {
}
}
}
import    {
{
f
}
}
protocol f {
class func c()
}
class e: f {
class func c
