-
Notifications
You must be signed in to change notification settings - Fork 10.4k
/
Copy pathlifetime_dependence_generics.swift
43 lines (33 loc) · 1.47 KB
/
lifetime_dependence_generics.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
// RUN: %target-swift-frontend %s -emit-sil \
// RUN: -enable-experimental-feature LifetimeDependence \
// RUN: -enable-experimental-feature SuppressedAssociatedTypes \
// RUN: | %FileCheck %s
// REQUIRES: swift_in_compiler
// REQUIRES: swift_feature_LifetimeDependence
// REQUIRES: swift_feature_SuppressedAssociatedTypes
protocol P {
associatedtype E: ~Escapable
@lifetime(borrow self)
borrowing func getE() -> E
}
extension P {
@lifetime(borrow self)
borrowing func getDefault() -> E {
return getE()
}
}
public struct View: ~Escapable {
@lifetime(immortal)
init() { }
}
public struct PView: P {
@lifetime(immortal)
borrowing func getE() -> View { return View() }
}
public func test(pview: borrowing PView) -> View {
return pview.getDefault()
}
// CHECK-LABEL: sil hidden @$s28lifetime_dependence_generics1PPAAE10getDefault1EQzyF : $@convention(method) <Self where Self : P> (@in_guaranteed Self) -> @lifetime(borrow address_for_deps 0) @out Self.E {
// CHECK-LABEL: sil hidden @$s28lifetime_dependence_generics5PViewV4getEAA4ViewVyF : $@convention(method) (PView) -> @lifetime(immortal) @owned View {
// CHECK-LABEL: sil private [transparent] [thunk] @$s28lifetime_dependence_generics5PViewVAA1PA2aDP4getE1EQzyFTW : $@convention(witness_method: P) (@in_guaranteed PView) -> @lifetime(borrow 0) @out View {
// CHECK-LABEL: sil @$s28lifetime_dependence_generics4test5pviewAA4ViewVAA5PViewV_tF : $@convention(thin) (PView) -> @lifetime(borrow 0) @owned View {