mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
60 lines
1.1 KiB
Swift
60 lines
1.1 KiB
Swift
// RUN: %target-run-simple-swift(-Xfrontend -sil-verify-all) | %FileCheck %s
|
|
// RUN: %target-run-simple-swift(-O -Xfrontend -sil-verify-all) | %FileCheck %s
|
|
|
|
// REQUIRES: executable_test
|
|
|
|
func destructure() {
|
|
let q = getQuad(name: "q")
|
|
|
|
// CHECK: hi q.p1.u1
|
|
// CHECK: hi q.p1.u2
|
|
// CHECK: hi q.p2.u1
|
|
// CHECK: hi q.p2.u2
|
|
|
|
take(q.p1.u1)
|
|
// CHECK: bye q.p1.u1
|
|
take(q.p1.u2)
|
|
// CHECK: bye q.p1.u2
|
|
take(q.p2.u1)
|
|
// CHECK: bye q.p2.u1
|
|
take(q.p2.u2)
|
|
// CHECK: bye q.p2.u2
|
|
}
|
|
|
|
struct Unique : ~Copyable {
|
|
let name: String
|
|
init(name: String) {
|
|
self.name = name
|
|
print("hi", name)
|
|
}
|
|
deinit {
|
|
print("bye", name)
|
|
}
|
|
}
|
|
|
|
func take(_ u: consuming Unique) {}
|
|
|
|
struct Pair : ~Copyable {
|
|
var u1: Unique
|
|
var u2: Unique
|
|
init(name: String) {
|
|
self.u1 = .init(name: "\(name).u1")
|
|
self.u2 = .init(name: "\(name).u2")
|
|
}
|
|
}
|
|
|
|
struct Quad : ~Copyable {
|
|
var p1: Pair
|
|
var p2: Pair
|
|
init(name: String) {
|
|
self.p1 = .init(name: "\(name).p1")
|
|
self.p2 = .init(name: "\(name).p2")
|
|
}
|
|
}
|
|
|
|
func getQuad(name: String) -> Quad {
|
|
return Quad(name: name)
|
|
}
|
|
|
|
destructure()
|