// 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
print("")
import Founda
(h() as p).dynamicType.g()
func j<f: l: e -> e = {
{
l) {
m  }
}
protocol k {
}
class e: k{  class func j
class A : NSManagedObject {
func b<T: A>() -> [T] {
}
}
extension NSSet {
init <A: A f<T>() -> T -> T {
}
}
protocol P {
}
struct d<f : e, g: e where g.h == f.h> {{
}
struct B<T : A> {
}
protocol C {
ty    }
}
func b<d-> d { class d:b class b
protocol A {
}
func f() {
}
func ^(d: e, Bool) -> Bool {g !(d)
}
protocol d {
f k  }
}
protocol n {
}
class o: n{  cla) u p).v.c()
k e.w == l> {
) -> (i o "
class m: f {
j h) {
}
func j() {
}
func j<d {
enum j {
}
}
struct j<d : Sequencpe> {
}
func f<d>() -> [j<d>] {
let d: Int = {
convenience init(array: Atati
