1- // RUN: %target-typecheck-verify-swift -disable-availability-checking -enable-experimental-feature NonescapableTypes -disable-experimental-parser-round-trip -enable-experimental-feature NoncopyableGenerics -enable-builtin-module
1+ // RUN: %target-typecheck-verify-swift -disable-availability-checking -enable-experimental-feature NonescapableTypes -disable-experimental-parser-round-trip -enable-experimental-feature NoncopyableGenerics -enable-builtin-module -enable-experimental-lifetime-dependence-inference
2+ // REQUIRES: asserts
23// REQUIRES: noncopyable_generics
34
45import Builtin
56
67struct BufferView : ~ Escapable {
78 let ptr : UnsafeRawBufferPointer
9+ @_unsafeNonescapableResult
810 init ( _ ptr: UnsafeRawBufferPointer ) {
911 self . ptr = ptr
1012 }
13+ @_unsafeNonescapableResult
1114 init ? ( _ ptr: UnsafeRawBufferPointer , _ i: Int ) {
1215 if ( i % 2 == 0 ) {
1316 return nil
@@ -18,15 +21,15 @@ struct BufferView : ~Escapable {
1821 self . ptr = ptr
1922 return self
2023 }
21- init ( _ ptr: UnsafeRawBufferPointer , _ a: consuming Array < Double > ) -> _consume( a) Self {
24+ init ( _ ptr: UnsafeRawBufferPointer , _ a: consuming Wrapper ) -> _consume( a) Self {
2225 self . ptr = ptr
2326 return self
2427 }
25- init ( _ ptr: UnsafeRawBufferPointer , _ a: consuming Array < Double > , b: borrowing Array < Int > ) -> _consume( a) _borrow( b) Self {
28+ init ( _ ptr: UnsafeRawBufferPointer , _ a: consuming Wrapper , b: borrowing Array < Int > ) -> _consume( a) _borrow( b) Self {
2629 self . ptr = ptr
2730 return self
2831 }
29- init ( _ ptr: UnsafeRawBufferPointer , _ a: consuming Array < Double > , b: borrowing Array < Int > , c: Double ) -> _consume( a) _borrow( b) Int { // expected-error{{expected Self return type for initializers with lifetime dependence specifiers}}
32+ init ( _ ptr: UnsafeRawBufferPointer , _ a: borrowing Array < Double > , b: borrowing Array < Int > , c: Double ) -> _consume( a) _borrow( b) Int { // expected-error{{expected Self return type for initializers with lifetime dependence specifiers}}
3033 self . ptr = ptr
3134 return 0
3235 }
@@ -43,6 +46,7 @@ struct BufferView : ~Escapable {
4346
4447struct MutableBufferView : ~ Escapable, ~ Copyable {
4548 let ptr : UnsafeMutableRawBufferPointer
49+ @_unsafeNonescapableResult
4650 init ( _ ptr: UnsafeMutableRawBufferPointer ) {
4751 self . ptr = ptr
4852 }
@@ -131,6 +135,10 @@ func invalidSpecifier4(_ x: borrowing BufferView) -> _borrow(0) BufferView { //
131135
132136struct Wrapper : ~ Escapable {
133137 let view : BufferView
138+ init ( _ view: consuming BufferView ) -> _consume( view) Self {
139+ self . view = view
140+ return self
141+ }
134142 borrowing func getView1( ) -> _borrow( self ) BufferView {
135143 return view
136144 }
0 commit comments