// RUN: %empty-directory(%t)
// RUN: %target-clang -x objective-c -c %S/Inputs/arc_36509461.m  -o %t/arc_36509461.m.o
// RUN: %target-swift-frontend -c -O -import-objc-header %S/Inputs/arc_36509461.h -sanitize=address %s -o %t/arc_36509461.swift.o
// RUN: %target-build-swift %t/arc_36509461.m.o %t/arc_36509461.swift.o -sanitize=address -o %t/arc_36509461
// RUN: %target-run %t/arc_36509461

// REQUIRES: executable_test
// REQUIRES: asan_runtime
// REQUIRES: objc_interop
// REQUIRES: OS=macosx

import Foundation

struct FakeUUID {
  var bigTuple: (UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8)

  init() {
    bigTuple = (0, 0, 0, 0, 0, 0, 0, 0)
  }
}

struct Record {
  let name: String
  let uuid: FakeUUID
  let storage: NSObject

  init(storage: NSObject, name: String, uuid: FakeUUID) {
     self.name = name
     self.uuid = uuid
     self.storage = storage
  }

  func copy() -> Record {
    let copiedNSObject = NSObject()
        
    fake_apply(self.storage) { (key, value) -> Bool in
      let x = copiedNSObject
      return true
    }

    var record = Record(storage: copiedNSObject, name: self.name, uuid: self.uuid)
    return record
  }
}

@inline(never)
func foo(record: Record) -> Record {
  return record.copy()
}

func main() {
     let record = Record(storage: NSObject(), name: "", uuid: FakeUUID())
     _ = foo(record: record)
}

main()
