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