1
+ @_unsafeNonescapableResult
2
+ @_alwaysEmitIntoClient
3
+ @_transparent
4
+ @lifetime ( borrow source)
5
+ internal func _overrideLifetime< T: ~ Copyable & ~ Escapable, U: ~ Copyable & ~ Escapable> (
6
+ _ dependent: consuming T , borrowing source: borrowing U ) -> T {
7
+ dependent
8
+ }
9
+
10
+ @_unsafeNonescapableResult
11
+ @_alwaysEmitIntoClient
12
+ @_transparent
13
+ @lifetime ( source)
14
+ internal func _overrideLifetime< T: ~ Copyable & ~ Escapable, U: ~ Copyable & ~ Escapable> (
15
+ _ dependent: consuming T , copying source: borrowing U ) -> T {
16
+ dependent
17
+ }
18
+
1
19
public struct AnotherView : ~ Escapable {
2
20
@usableFromInline let _ptr : UnsafeRawBufferPointer
3
21
@usableFromInline let _count : Int
@@ -21,19 +39,23 @@ public struct BufferView : ~Escapable {
21
39
@inlinable
22
40
@lifetime ( borrow a)
23
41
internal init ( _ ptr: UnsafeRawBufferPointer , _ a: borrowing Array < Int > ) {
24
- self . init ( ptr, a. count)
42
+ let bv = BufferView ( ptr, a. count)
43
+ self = _overrideLifetime ( bv, borrowing: a)
25
44
}
26
45
@inlinable
27
46
@lifetime ( a)
28
47
internal init ( _ ptr: UnsafeRawBufferPointer , _ a: consuming AnotherView ) {
29
- self . init ( ptr, a. _count)
48
+ let bv = BufferView ( ptr, a. _count)
49
+ self = _overrideLifetime ( bv, copying: a)
30
50
}
31
51
}
32
52
33
53
@inlinable
34
54
@lifetime ( x)
35
55
public func derive( _ x: consuming BufferView ) -> BufferView {
36
- return BufferView ( x. _ptr, x. _count)
56
+ let pointer = x. _ptr
57
+ let bv = BufferView ( pointer, x. _count)
58
+ return _overrideLifetime ( bv, copying: x)
37
59
}
38
60
39
61
@inlinable
@@ -42,7 +64,9 @@ public func use(_ x: consuming BufferView) {}
42
64
@inlinable
43
65
@lifetime ( view)
44
66
public func consumeAndCreate( _ view: consuming BufferView ) -> BufferView {
45
- return BufferView ( view. _ptr, view. _count)
67
+ let pointer = view. _ptr
68
+ let bv = BufferView ( pointer, view. _count)
69
+ return _overrideLifetime ( bv, copying: view)
46
70
}
47
71
48
72
@inlinable
@@ -54,14 +78,6 @@ public func deriveThisOrThat(_ this: consuming BufferView, _ that: consuming Buf
54
78
return BufferView ( that. _ptr, that. _count)
55
79
}
56
80
57
- @_unsafeNonescapableResult
58
- @_transparent
59
- @lifetime ( borrow source)
60
- internal func _overrideLifetime< T: ~ Copyable & ~ Escapable, U: ~ Copyable & ~ Escapable> (
61
- _ dependent: consuming T , borrowing source: borrowing U ) -> T {
62
- dependent
63
- }
64
-
65
81
public struct Container {
66
82
var buffer : UnsafeRawBufferPointer
67
83
var object : AnyObject
0 commit comments