Files
swift-mirror/test/Interpreter/reference_bindings.swift
Michael Gottesman c2f19625c7 [reference-bindings] Disable a test when we backdeploy.
This is an experimental feature that is not being actively worked on. Disable
the test when we backwards deploy for now to fix the bots. I am not deleting the
test since it seems to be working on the main bots and it makes sense to at
least keep that going to prevent further breakage.

rdar://159026031
2025-10-01 11:58:08 -07:00

111 lines
2.1 KiB
Swift

// RUN: %target-run-simple-swift(-Xfrontend -sil-verify-all -enable-experimental-feature ReferenceBindings)
// REQUIRES: executable_test
// REQUIRES: swift_feature_ReferenceBindings
// UNSUPPORTED: back_deployment_runtime
import StdlibUnittest
defer { runAllTests() }
var tests = TestSuite("reference bindings")
var global: String = "globalName"
tests.test("global access") {
expectEqual(global, "globalName")
do {
inout x = global
expectEqual(x, "globalName")
}
expectEqual(global, "globalName")
}
tests.test("multiple global access exclusivity error")
.crashOutputMatches("Simultaneous accesses to")
.code {
expectCrashLater()
@inline(never)
func test(_ x: inout String) {
inout x = global
}
test(&global)
}
tests.test("Class Instance Field Access") {
class Klass {
var name: String = "klassName"
}
let k = Klass()
expectEqual(k.name, "klassName")
do {
inout x = k.name
expectEqual(x, "klassName")
}
expectEqual(k.name, "klassName")
}
tests.test("Var Access") {
var varName = "varName"
do {
inout x = varName
expectEqual(x, "varName")
}
expectEqual(varName, "varName")
struct S {
var s1 = "field1"
var s2 = "field2"
}
var s = S()
expectEqual(s.s1, "field1")
expectEqual(s.s2, "field2")
do {
inout x = s.s1
expectEqual(x, "field1")
}
expectEqual(s.s1, "field1")
expectEqual(s.s2, "field2")
do {
inout x2 = s.s2
expectEqual(x2, "field2")
}
expectEqual(s.s1, "field1")
expectEqual(s.s2, "field2")
}
tests.test("InOut Access") {
var varName = "varName"
func inoutTest(_ inputX: inout String) {
expectEqual(inputX, "varName")
inout x = inputX
expectEqual(x, "varName")
}
inoutTest(&varName)
expectEqual(varName, "varName")
}
// We use to hit a verifier error here.
tests.test("Class Use") {
class Klass {
var value: String = "varName"
}
struct S {
var k = Klass()
var i = 5
mutating func x() {
print("\(i)")
}
}
var s = S()
do {
inout x = s.k
expectEqual(x.value, "varName")
}
}