// This source file is part of the Swift.org open source project
// Copyright (c) 2014 - 2016 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See http://swift.org/LICENSE.txt for license information
// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors

// RUN: not %target-swift-frontend %s -parse
public class a {
typealias C {
for ()))
import Foundation
}
struct c in a {
}
}
}
}
}
enum B = T>, T -> (T] == b, k : [Byte](x)) {
}
return g> (z("))() -> {
f: a {
}
public var d {
return $0] == b: b)
class a {
class A {
}
}
class A {
struct e : a {
class B : a {
struct Q<h
protocol a {
typealias A : A {
init(seq: b: C({
extension NSData {
}
}
}
let n1: T : U {
}
b(","ab"
typealias A {
})
func b: (Range(b
}
struct c, 3)
protoco
