Skip to content

Commit c612f3c

Browse files
committed
[Test] Added test for value partial consumption.
This test didn't compile without the fix to CanonicalizeInstruction.
1 parent 2cbc13a commit c612f3c

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
// RUN: %target-run-simple-swift(-Xfrontend -sil-verify-all -enable-experimental-feature MoveOnlyPartialConsumption) | %FileCheck %s
2+
// RUN: %target-run-simple-swift(-O -Xfrontend -sil-verify-all -enable-experimental-feature MoveOnlyPartialConsumption) | %FileCheck %s
3+
4+
// REQUIRES: executable_test
5+
6+
func destructure() {
7+
let q = getQuad(name: "q")
8+
9+
// CHECK: hi q.p1.u1
10+
// CHECK: hi q.p1.u2
11+
// CHECK: hi q.p2.u1
12+
// CHECK: hi q.p2.u2
13+
14+
take(q.p1.u1)
15+
// CHECK: bye q.p1.u1
16+
take(q.p1.u2)
17+
// CHECK: bye q.p1.u2
18+
take(q.p2.u1)
19+
// CHECK: bye q.p2.u1
20+
take(q.p2.u2)
21+
// CHECK: bye q.p2.u2
22+
}
23+
24+
struct Unique : ~Copyable {
25+
let name: String
26+
init(name: String) {
27+
self.name = name
28+
print("hi", name)
29+
}
30+
deinit {
31+
print("bye", name)
32+
}
33+
}
34+
35+
func take(_ u: consuming Unique) {}
36+
37+
struct Pair : ~Copyable {
38+
var u1: Unique
39+
var u2: Unique
40+
init(name: String) {
41+
self.u1 = .init(name: "\(name).u1")
42+
self.u2 = .init(name: "\(name).u2")
43+
}
44+
}
45+
46+
struct Quad : ~Copyable {
47+
var p1: Pair
48+
var p2: Pair
49+
init(name: String) {
50+
self.p1 = .init(name: "\(name).p1")
51+
self.p2 = .init(name: "\(name).p2")
52+
}
53+
}
54+
55+
func getQuad(name: String) -> Quad {
56+
return Quad(name: name)
57+
}
58+
59+
destructure()

0 commit comments

Comments
 (0)