@@ -8,17 +8,21 @@ import Builtin
88
99struct BufferView : ~ Escapable {
1010 let ptr : UnsafeRawBufferPointer
11- @_unsafeNonescapableResult
12- init ( _ ptr: UnsafeRawBufferPointer ) {
11+ init ( _ ptr: UnsafeRawBufferPointer ) -> dependsOn( ptr) Self {
1312 self . ptr = ptr
1413 }
14+ // TODO: -> dependsOn(ptr) Self
1515 @_unsafeNonescapableResult
1616 init ? ( _ ptr: UnsafeRawBufferPointer , _ i: Int ) {
1717 if ( i % 2 == 0 ) {
1818 return nil
1919 }
2020 self . ptr = ptr
2121 }
22+ @_unsafeNonescapableResult
23+ init ( independent ptr: UnsafeRawBufferPointer ) {
24+ self . ptr = ptr
25+ }
2226// CHECK: sil hidden @$s39explicit_lifetime_dependence_specifiers10BufferViewVyACSW_SaySiGhYlstcfC : $@convention(method) (UnsafeRawBufferPointer, @guaranteed Array<Int>, @thin BufferView.Type) -> _scope(1) @owned BufferView {
2327 init ( _ ptr: UnsafeRawBufferPointer , _ a: borrowing Array < Int > ) -> dependsOn( a) Self {
2428 self . ptr = ptr
@@ -38,8 +42,7 @@ struct BufferView : ~Escapable {
3842
3943struct MutableBufferView : ~ Escapable, ~ Copyable {
4044 let ptr : UnsafeMutableRawBufferPointer
41- @_unsafeNonescapableResult
42- init ( _ ptr: UnsafeMutableRawBufferPointer ) {
45+ init ( _ ptr: UnsafeMutableRawBufferPointer ) -> dependsOn( ptr) Self {
4346 self . ptr = ptr
4447 }
4548}
@@ -57,28 +60,28 @@ func testBasic() {
5760
5861// CHECK: sil hidden @$s39explicit_lifetime_dependence_specifiers6deriveyAA10BufferViewVADYlsF : $@convention(thin) (@guaranteed BufferView) -> _scope(0) @owned BufferView {
5962func derive( _ x: borrowing BufferView ) -> dependsOn ( scoped x) BufferView {
60- return BufferView ( x. ptr)
63+ return BufferView ( independent : x. ptr)
6164}
6265
6366// CHECK: sil hidden @$s39explicit_lifetime_dependence_specifiers16consumeAndCreateyAA10BufferViewVADnYliF : $@convention(thin) (@owned BufferView) -> _inherit(0) @owned BufferView {
6467func consumeAndCreate( _ x: consuming BufferView ) -> dependsOn( x ) BufferView {
65- return BufferView ( x. ptr)
68+ return BufferView ( independent : x. ptr)
6669}
6770
6871// CHECK: sil hidden @$s39explicit_lifetime_dependence_specifiers17deriveThisOrThat1yAA10BufferViewVADYls_ADYlstF : $@convention(thin) (@guaranteed BufferView, @guaranteed BufferView) -> _scope(0, 1) @owned BufferView {
6972func deriveThisOrThat1( _ this: borrowing BufferView , _ that: borrowing BufferView ) -> dependsOn ( scoped this, that) BufferView {
7073 if ( Int . random ( in: 1 ..< 100 ) == 0 ) {
71- return BufferView ( this. ptr)
74+ return BufferView ( independent : this. ptr)
7275 }
73- return BufferView ( that. ptr)
76+ return BufferView ( independent : that. ptr)
7477}
7578
7679// CHECK: sil hidden @$s39explicit_lifetime_dependence_specifiers17deriveThisOrThat2yAA10BufferViewVADYls_ADnYlitF : $@convention(thin) (@guaranteed BufferView, @owned BufferView) -> _inherit(1) _scope(0) @owned BufferView {
7780func deriveThisOrThat2( _ this: borrowing BufferView , _ that: consuming BufferView ) -> dependsOn( scoped this) dependsOn( that ) BufferView {
7881 if ( Int . random ( in: 1 ..< 100 ) == 0 ) {
79- return BufferView ( this. ptr)
82+ return BufferView ( independent : this. ptr)
8083 }
81- return BufferView ( that. ptr)
84+ return BufferView ( independent : that. ptr)
8285}
8386
8487func use( _ x: borrowing BufferView ) { }
@@ -101,19 +104,18 @@ struct Wrapper : ~Escapable {
101104
102105struct Container : ~ Escapable {
103106 let ptr : UnsafeRawBufferPointer
104- @_unsafeNonescapableResult
105- init ( _ ptr: UnsafeRawBufferPointer ) {
107+ init ( _ ptr: UnsafeRawBufferPointer ) -> dependsOn( ptr) Self {
106108 self . ptr = ptr
107109 }
108110}
109111
110112// CHECK-LABEL: sil hidden @$s39explicit_lifetime_dependence_specifiers16getConsumingViewyAA06BufferG0VAA9ContainerVnYliF : $@convention(thin) (@owned Container) -> _inherit(0) @owned BufferView {
111113func getConsumingView( _ x: consuming Container ) -> dependsOn( x ) BufferView {
112- return BufferView ( x. ptr)
114+ return BufferView ( independent : x. ptr)
113115}
114116
115117// CHECK-LABEL: sil hidden @$s39explicit_lifetime_dependence_specifiers16getBorrowingViewyAA06BufferG0VAA9ContainerVYlsF : $@convention(thin) (@guaranteed Container) -> _scope(0) @owned BufferView {
116118func getBorrowingView( _ x: borrowing Container ) -> dependsOn ( scoped x) BufferView {
117- return BufferView ( x. ptr)
119+ return BufferView ( independent : x. ptr)
118120}
119121
0 commit comments