Files
swift-mirror/test/Interpreter/moveonly_partial_consume_value.swift
2024-04-19 12:37:34 -07:00

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()