File tree Expand file tree Collapse file tree 1 file changed +59
-0
lines changed Expand file tree Collapse file tree 1 file changed +59
-0
lines changed Original file line number Diff line number Diff line change
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 ( )
You can’t perform that action at this time.
0 commit comments