mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
114 lines
2.4 KiB
Swift
114 lines
2.4 KiB
Swift
// RUN: %target-run-simple-swift(-parse-as-library -Xfrontend -sil-verify-all) | %FileCheck %s
|
|
// RUN: %target-run-simple-swift(-parse-as-library -O -Xfrontend -sil-verify-all) | %FileCheck %s
|
|
|
|
// REQUIRES: executable_test
|
|
|
|
@main struct App { static func main() {
|
|
test1()
|
|
}}
|
|
|
|
func barrier() { print("barrier") }
|
|
|
|
struct Ur : ~Copyable {
|
|
var name: String
|
|
init(named name: String) {
|
|
self.name = name
|
|
print("hi", name)
|
|
}
|
|
deinit {
|
|
print("bye", name)
|
|
}
|
|
}
|
|
func take(_ u: consuming Ur) {}
|
|
|
|
struct Pair : ~Copyable {
|
|
var u1: Ur
|
|
var u2: Ur
|
|
init(named name: String) {
|
|
u1 = .init(named: "\(name).u1")
|
|
u2 = .init(named: "\(name).u2")
|
|
}
|
|
}
|
|
func take(_ u: consuming Pair) {}
|
|
|
|
struct Quad : ~Copyable {
|
|
var p1: Pair
|
|
var p2: Pair
|
|
init(named name: String) {
|
|
p1 = .init(named: "\(name).p1")
|
|
p2 = .init(named: "\(name).p2")
|
|
}
|
|
}
|
|
func take(_ u: consuming Quad) {}
|
|
|
|
func test1() {
|
|
do {
|
|
let q1 = Quad(named: "\(#function).q1")
|
|
barrier()
|
|
// CHECK: barrier
|
|
// CHECK: bye test1().q1.p1.u1
|
|
// CHECK: bye test1().q1.p1.u2
|
|
// CHECK: bye test1().q1.p2.u1
|
|
// CHECK: bye test1().q1.p2.u2
|
|
}
|
|
|
|
let q2 = Quad(named: "\(#function).q2")
|
|
take(q2.p2.u2)
|
|
take(q2.p2.u1)
|
|
barrier()
|
|
take(q2.p1.u2)
|
|
take(q2.p1.u1)
|
|
// CHECK: bye test1().q2.p2.u2
|
|
// CHECK: bye test1().q2.p2.u1
|
|
// CHECK: barrier
|
|
// CHECK: bye test1().q2.p1.u2
|
|
// CHECK: bye test1().q2.p1.u1
|
|
|
|
let q3 = Quad(named: "\(#function).q3")
|
|
_ = consume q3.p2.u2
|
|
_ = consume q3.p2.u1
|
|
_ = consume q3.p1.u2
|
|
barrier()
|
|
_ = consume q3.p1.u1
|
|
// CHECK: bye test1().q3.p2.u2
|
|
// CHECK: bye test1().q3.p2.u1
|
|
// CHECK: bye test1().q3.p1.u2
|
|
// CHECK: barrier
|
|
// CHECK: bye test1().q3.p1.u1
|
|
|
|
let q4 = Quad(named: "\(#function).q4")
|
|
_ = consume q4.p1.u1
|
|
barrier()
|
|
_ = consume q4.p2.u1
|
|
_ = consume q4.p1.u2
|
|
_ = consume q4.p2.u2
|
|
// CHECK: bye test1().q4.p1.u1
|
|
// CHECK: barrier
|
|
// CHECK: bye test1().q4.p2.u1
|
|
// CHECK: bye test1().q4.p1.u2
|
|
// CHECK: bye test1().q4.p2.u2
|
|
|
|
do {
|
|
let q5 = Quad(named: "\(#function).q5")
|
|
take(q5.p1.u1)
|
|
_ = consume q5.p2.u1
|
|
_ = consume q5.p1.u2
|
|
take(q5.p2.u2)
|
|
// CHECK: bye test1().q5.p1.u1
|
|
// CHECK: bye test1().q5.p2.u1
|
|
// CHECK: bye test1().q5.p1.u2
|
|
// CHECK: bye test1().q5.p2.u2
|
|
}
|
|
do {
|
|
let q6 = Quad(named: "\(#function).q6")
|
|
if Bool.random() {
|
|
take(q6.p1.u1)
|
|
_ = consume q6.p2.u1
|
|
} else {
|
|
_ = consume q6.p1.u2
|
|
take(q6.p2.u2)
|
|
}
|
|
}
|
|
}
|
|
|