blob: 40fadec88b53a50ac730125a5e911b7467ec4d94 [file] [log] [blame]
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -I %S/Inputs/user-module -typecheck %s -verify
// REQUIRES: objc_interop
// Type checker should not report any errors in the code below.
import Foundation
import user
var ui: UInt = 5
var i: Int = 56
var p: UnsafeMutablePointer<NSFastEnumerationState>?
var pp: AutoreleasingUnsafeMutablePointer<AnyObject?>?
var userTypedObj = NSUIntTest()
// Check that the NSUInteger comes across as UInt from user Obj C modules.
var ur: UInt = userTypedObj.myCustomMethodThatOperates(onNSUIntegers: ui)
userTypedObj.intProp = ui
userTypedObj.typedefProp = ui
ur = testFunction(ui)
testFunctionInsideMacro(ui)
// Test that nesting works.
var pui: UnsafeMutablePointer<UInt>
ur = testFunctionWithPointerParam(pui)
// NSUIntTest is a user class that conforms to a system defined protocol.
// The types are treated as system types when working with objects having
// protocol type.
var a: [NSFastEnumeration] = [NSUIntTest(), NSUIntTest()]
var r: Int = a[0].countByEnumerating(with: p!, objects: pp!, count: i)
// When working with instances typed as user-defined, NSUInteger comes
// across as UInt.
var rr: UInt = userTypedObj.countByEnumerating(with: p!, objects: pp!, count: ui)
// Check exercising protocol conformance.
func gen<T:NSFastEnumeration>(_ t:T) {
let i: Int = 56
let p: UnsafeMutablePointer<NSFastEnumerationState>?
let pp: AutoreleasingUnsafeMutablePointer<AnyObject?>?
t.countByEnumerating(with: p!, objects: pp!, count: i)
}
gen(userTypedObj)