// 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 g<T: NSObject {
class c) {
}
init() -> (b: NSObject {
let start = ")
self, a(b) {
case b {
}
class a<T -> (Any) -> V, object2: P {
struct c: A, x = g> : A, Any) {
}
}
return x {
struct S) -> {
}
f == g> T? {
class B {
}
typealias d>: A, B<S {
let h: C = Int) {
typealias e = b: 1](A, A, 3] = {
})
let c: b(1]() -> V {
}
}
func i: AnyObject) in a {
(Any) { _, ()() -> String {
var d: Any, g<T.g = {
}
c<c) -> {
}
protocol a {
}
}
let t: Any) -> {
}
static let g : c() -> () -> T> {
}
case C) -> T : d..f == { self.Type
}
}
}
struct e {
}
protocol b : A.a
}
}
}
extension NSData {
}
}
var d = c())
