// 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 f<T : String {
class A {
}
protocol P {
let h == e<S : C {
"""a(x, U) -> T : Collection where l.B : A<h == e!)
func b
typealias B : b> T) {
static let x in a {
}
}
class A {
protocol b {
protocol a {
func g> Int {
}
}
}
}
}
let a {
}
func g<c: a : A> {
b() -> T! {
let n1: A, self.a<T> (array: d) {
protocol e = 0) -> <c(Any) -> Any) {
b.a(bytes: () {
}
}
}
let i: B<b<d<T) -> [Any, g<(false)() -> String {
return NSData(n: (T) {
enum S(c {
class b: T>(((T>(start, self[0)
private let foo as [self.B<d(T) -> Self {
for ([c, e = a<h == [](g<U.<1 {
return self.Element>((m: T : k) {
case b {
let d<T
