// 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 c<S {
i: Any) -> {
enum b {
}
struct Q<c, B, a: C) {
}
self.join() {
enum b : T! {
var f() -> <d()))) -> V {
extension NSData {
return !.b = {
}
self.b {
}
}
func c) -> {
for c : a {
}
}
extension NSSet {
private class A : Sequence, b {
}
class C<T) -> U -> U {
}(x)
var c> {
}
}
}
}
extension Array {
}
}
}
struct A {
func c<1 {
return g() {
protocol d {
let n1: a : P {
init() {
}
class func a(x) {
}
protocol A {
}
}
struct Q<T) -> Int {
}
}
}
if c = F>() {
