@@ -7,11 +7,12 @@ import Swift
7
7
8
8
class Klass { }
9
9
10
- // CHECK-LABEL: sil hidden [ossa] @$s8moveonly7useMoveyAA5KlassCADF : $@convention(thin) (@guaranteed Klass) -> @owned Klass {
10
+ // CHECK-LABEL: sil hidden [ossa] @$s8moveonly7useMoveyAA5KlassCADnF : $@convention(thin) (@owned Klass) -> @owned Klass {
11
11
// CHECK: bb0([[ARG:%.*]] :
12
+ // CHECK-NEXT: [[BORROWED_ARG:%.*]] = begin_borrow [lexical] [[ARG]]
12
13
// CHECK-NEXT: debug_value
13
14
// CHECK-NEXT: [[RESULT_ADDR:%.*]] = alloc_stack $Klass
14
- // CHECK-NEXT: [[ARC_COPY:%.*]] = copy_value [[ARG ]]
15
+ // CHECK-NEXT: [[ARC_COPY:%.*]] = copy_value [[BORROWED_ARG ]]
15
16
// CHECK-NEXT: [[INPUT_ADDR:%.*]] = alloc_stack $Klass
16
17
// CHECK-NEXT: store [[ARC_COPY]] to [init] [[INPUT_ADDR]]
17
18
// CHECK-NEXT: // function_ref _move<A>(_:)
@@ -20,26 +21,31 @@ class Klass {}
20
21
// CHECK-NEXT: dealloc_stack [[INPUT_ADDR]]
21
22
// CHECK-NEXT: [[RELOADED_VALUE:%.*]] = load [take] [[RESULT_ADDR]]
22
23
// CHECK-NEXT: dealloc_stack [[RESULT_ADDR]]
24
+ // CHECK-NEXT: end_borrow [[BORROWED_ARG]]
25
+ // CHECK-NEXT: destroy_value [[ARG]]
23
26
// CHECK-NEXT: return [[RELOADED_VALUE]]
24
- // CHECK: } // end sil function '$s8moveonly7useMoveyAA5KlassCADF '
27
+ // CHECK: } // end sil function '$s8moveonly7useMoveyAA5KlassCADnF '
25
28
26
- // CHECK-SIL-LABEL: sil hidden @$s8moveonly7useMoveyAA5KlassCADF : $@convention(thin) (@guaranteed Klass) -> @owned Klass {
29
+ // CHECK-SIL-LABEL: sil hidden @$s8moveonly7useMoveyAA5KlassCADnF : $@convention(thin) (@owned Klass) -> @owned Klass {
27
30
// CHECK-SIL: bb0([[ARG:%.*]] :
28
31
// CHECK-SIL-NEXT: debug_value
29
32
// CHECK-SIL-NEXT: strong_retain
30
- // CHECK-SIL-NEXT: [allows_diagnostics] move_value
33
+ // CHECK-SIL-NEXT: move_value
31
34
// CHECK-SIL-NEXT: tuple
35
+ // CHECK-SIL-NEXT: tuple
36
+ // CHECK-SIL-NEXT: strong_release
32
37
// CHECK-SIL-NEXT: return
33
- // CHECK-SIL: } // end sil function '$s8moveonly7useMoveyAA5KlassCADF '
34
- func useMove( _ k: Klass ) -> Klass {
38
+ // CHECK-SIL: } // end sil function '$s8moveonly7useMoveyAA5KlassCADnF '
39
+ func useMove( _ k: __owned Klass) -> Klass {
35
40
_move ( k)
36
41
}
37
42
38
- // CHECK-LABEL: sil hidden [ossa] @$s8moveonly7useMoveyxxRlzClF : $@convention(thin) <T where T : AnyObject> (@guaranteed T) -> @owned T {
43
+ // CHECK-LABEL: sil hidden [ossa] @$s8moveonly7useMoveyxxnRlzClF : $@convention(thin) <T where T : AnyObject> (@owned T) -> @owned T {
39
44
// CHECK: bb0([[ARG:%.*]] :
45
+ // CHECK-NEXT: [[BORROWED_ARG:%.*]] = begin_borrow [lexical] [[ARG]]
40
46
// CHECK-NEXT: debug_value
41
47
// CHECK-NEXT: [[RESULT_ADDR:%.*]] = alloc_stack $T
42
- // CHECK-NEXT: [[ARC_COPY:%.*]] = copy_value [[ARG ]]
48
+ // CHECK-NEXT: [[ARC_COPY:%.*]] = copy_value [[BORROWED_ARG ]]
43
49
// CHECK-NEXT: [[INPUT_ADDR:%.*]] = alloc_stack $T
44
50
// CHECK-NEXT: store [[ARC_COPY]] to [init] [[INPUT_ADDR]]
45
51
// CHECK-NEXT: // function_ref _move<A>(_:)
@@ -48,17 +54,21 @@ func useMove(_ k: Klass) -> Klass {
48
54
// CHECK-NEXT: dealloc_stack [[INPUT_ADDR]]
49
55
// CHECK-NEXT: [[RELOADED_VALUE:%.*]] = load [take] [[RESULT_ADDR]]
50
56
// CHECK-NEXT: dealloc_stack [[RESULT_ADDR]]
57
+ // CHECK-NEXT: end_borrow [[BORROWED_ARG]]
58
+ // CHECK-NEXT: destroy_value [[ARG]]
51
59
// CHECK-NEXT: return [[RELOADED_VALUE]]
52
- // CHECK: } // end sil function '$s8moveonly7useMoveyxxRlzClF '
60
+ // CHECK: } // end sil function '$s8moveonly7useMoveyxxnRlzClF '
53
61
54
- // CHECK-SIL-LABEL: sil hidden @$s8moveonly7useMoveyxxRlzClF : $@convention(thin) <T where T : AnyObject> (@guaranteed T) -> @owned T {
62
+ // CHECK-SIL-LABEL: sil hidden @$s8moveonly7useMoveyxxnRlzClF : $@convention(thin) <T where T : AnyObject> (@owned T) -> @owned T {
55
63
// CHECK-SIL: bb0([[ARG:%.*]] :
56
64
// CHECK-SIL-NEXT: debug_value
57
65
// CHECK-SIL-NEXT: strong_retain
58
- // CHECK-SIL-NEXT: [allows_diagnostics] move_value
66
+ // CHECK-SIL-NEXT: move_value
67
+ // CHECK-SIL-NEXT: tuple
59
68
// CHECK-SIL-NEXT: tuple
69
+ // CHECK-SIL-NEXT: strong_release
60
70
// CHECK-SIL-NEXT: return
61
- // CHECK-SIL: } // end sil function '$s8moveonly7useMoveyxxRlzClF '
62
- func useMove< T : AnyObject > ( _ k: T ) -> T {
71
+ // CHECK-SIL: } // end sil function '$s8moveonly7useMoveyxxnRlzClF '
72
+ func useMove< T : AnyObject > ( _ k: __owned T) -> T {
63
73
_move ( k)
64
74
}
0 commit comments