// RUN: %target-swift-frontend -module-name Swift -parse-stdlib -parse-as-library -emit-silgen -enable-sil-ownership %s

// This files contains a minimal implementation for Swift to emit foreach loops
// for a type. It acts partially as a guide for users and since it is in the
// form of a test, it ensures that we will always be able to get this test
// through the type checker.

precedencegroup AssignmentPrecedence { assignment: true }

public protocol ExpressibleByNilLiteral {
  init(nilLiteral: ())
}

protocol IteratorProtocol {
  associatedtype Element
  mutating func next() ->  Element?
}

protocol Sequence {
  associatedtype Element
  associatedtype Iterator : IteratorProtocol where Iterator.Element == Element

  func makeIterator() -> Iterator
}

enum Optional<T> {
case none
case some(T)
}

func _diagnoseUnexpectedNilOptional(_filenameStart: Builtin.RawPointer,
                                    _filenameLength: Builtin.Word,
                                    _filenameIsASCII: Builtin.Int1,
                                    _line: Builtin.Word) {
  // This would usually contain an assert, but we don't need one since we are
  // just emitting SILGen.
}

extension Optional : ExpressibleByNilLiteral {
  public init(nilLiteral: ()) {
    self = .none
  }
}

class FakeCollection<T> {
}

struct FakeCollectionIterator<T> {
  weak var collection: FakeCollection<T>?

  init(_ newCollection: FakeCollection<T>) {
    collection = newCollection
  }
}

extension FakeCollectionIterator : IteratorProtocol {
  public typealias Element = T
  public mutating func next() -> Element? {
    return .none
  }
}

extension FakeCollection : Sequence {
  public typealias Element = T
  public typealias Iterator = FakeCollectionIterator<T>
  public func makeIterator() -> FakeCollectionIterator<T> {
    return FakeCollectionIterator(self)
  }
}

func useT<T>(_ t: T) {}

func iterateFakeCollection<T>(_ x: FakeCollection<T>) {
  for y in x {
    useT(y)
  }
}
