Files
swift-mirror/test/SIL/lifetime_dependence_generics.swift
Joe Groff c949e6295f SIL: Lower fields that are conditionally addressable because of a dependency.
Parameters of generic type need to be treated as potentially
addressable-for-dependencies, but we don't want callers using the generic
function with concrete types that are known not to be addressable-for-
dependencies to be overconstrained. In SILFunctionType lowering, lower
these dependencies distinctly as conditionally addressable, meaning that
the dependency on an argument depends on whether the concrete type of
that argument is (potentially) addressable-for-dependencies or not.
2025-03-15 16:07:03 -07:00

44 lines
1.5 KiB
Swift

// 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 {