// 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
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
