// RUN: %target-run-simple-swift | %FileCheck %s
// REQUIRES: executable_test

protocol ProtocolHasInOut {
  associatedtype Input
  typealias Mutator = (inout Input) -> ()
  var f: Mutator { get }
}

// Emit type metadata for this struct's fields
struct HasInOut<T> {
  var f: (inout T) -> ()
}

struct HasInOutProtocol : ProtocolHasInOut {
  typealias Input = Int
  let f: (inout Input) -> ()
}

func foo<T>(_ t: T.Type) -> Any {
  return { (x: T) -> Int in return 6060 }
}

var i = 0

// Dynamic casting
var f = foo((Int, Int).self)
var g = f as! (Int, Int) -> Int
print(g(1010, 2020))
// CHECK: 6060

// Struct with InOut
let hio = HasInOut(f: { (x: inout Int) in x = 3030 })
i = 0
hio.f(&i)
print(i)
// CHECK: 3030

// Struct that conforms to Protocol with InOut
let hiop = HasInOutProtocol(f: { (x: inout Int) in x = 4040 })
i = 0
hiop.f(&i)
print(i)
// CHECK: 4040

func fooInOut<T>(_ t: T.Type) -> Any {
  return { (x: inout T) -> () in x = unsafeBitCast((8080, 9090), to: T.self) }
}

var fio = fooInOut((Int, Int).self)
var gio = fio as! (inout (Int, Int)) -> ()
var xy = (0, 0)
gio(&xy)
print(xy)
// CHECK: (8080, 9090)
