Files
swift-mirror/test/Interop/Cxx/foreign-reference/reference-counted.swift
Zoe Carver b0de482d82 Merge pull request #61757 from zoecarver/frt-method-call-crash
[cxx-interop] Fix crash when lowering self arg in foriegn reference t…
2022-10-27 09:54:07 -07:00

65 lines
1.6 KiB
Swift

// RUN: %target-run-simple-swift(-I %S/Inputs/ -Xfrontend -enable-experimental-cxx-interop -Xfrontend -validate-tbd-against-ir=none -Xfrontend -disable-llvm-verify)
//
// REQUIRES: executable_test
// TODO: This should work without ObjC interop in the future rdar://97497120
// REQUIRES: objc_interop
// REQUIRES: rdar97532642
import StdlibUnittest
import ReferenceCounted
var ReferenceCountedTestSuite = TestSuite("Foreign reference types that have reference counts")
@inline(never)
public func blackHole<T>(_ _: T) { }
@inline(never)
func localTest() {
var x = NS.LocalCount.create()
expectEqual(x.value, 6) // This is 6 because of "var x" "x.value" * 2 and "(x, x, x)".
expectEqual(x.returns42(), 42)
expectEqual(x.constMethod(), 42)
let t = (x, x, x)
expectEqual(x.value, 5)
}
ReferenceCountedTestSuite.test("Local") {
expectNotEqual(finalLocalRefCount, 0)
localTest()
expectEqual(finalLocalRefCount, 0)
}
var globalOptional: NS.LocalCount? = nil
ReferenceCountedTestSuite.test("Global optional holding local ref count") {
expectEqual(finalLocalRefCount, 0)
globalOptional = NS.LocalCount.create()
expectEqual(finalLocalRefCount, 1)
}
@inline(never)
func globalTest1() {
var x = GlobalCount.create()
let t = (x, x, x)
expectEqual(globalCount, 4)
blackHole(t)
}
@inline(never)
func globalTest2() {
var x = GlobalCount.create()
expectEqual(globalCount, 1)
}
ReferenceCountedTestSuite.test("Global") {
expectEqual(globalCount, 0)
globalTest1()
globalTest2()
expectEqual(globalCount, 0)
}
runAllTests()