blob: a39632f07bc01506050f0d33518d05444d6d6c1c [file] [log] [blame]
// RUN: %target-swift-emit-sil %s
// TF-928: Ownership verification error in pullback function generated by the
// differentiation transform.
struct Tracked<T> {
class Box {
init() {}
}
var box: Box = Box()
}
extension Tracked : Equatable where T : Equatable {
static func ==(_: Self, _: Self) -> Bool { fatalError() }
}
extension Tracked : AdditiveArithmetic where T : AdditiveArithmetic {
static var zero: Self { fatalError() }
static func +(_: Self, _: Self) -> Self { fatalError() }
static func -(_: Self, _: Self) -> Self { fatalError() }
}
extension Tracked : Differentiable where T : Differentiable, T == T.TangentVector {
typealias TangentVector = Tracked<T.TangentVector>
}
func TF_928(
_ lossFunction: @differentiable (Tracked<Float>, Tracked<Float>) -> Tracked<Float>,
_ x: Tracked<Float>
) {
_ = pullback(at: x) { x in lossFunction(x, Tracked<Float>()) }
_ = pullback(at: x) { x in lossFunction(Tracked<Float>(), x) }
}
// Function: 'AD__$s4main6TF_928yyAA7TrackedVySfGAE_AEtXF_AEtFA2EcfU___pullback_src_0_wrt_0'
// Error! Found a leaked owned value that was never consumed.
// Value: (%5, **%6**) = destructure_tuple %3 : $(Tracked<Float>, Tracked<Float>)
// Stack dump:
// While verifying SIL function "@AD__$s4main6TF_928yyAA7TrackedVySfGAE_AEtXF_AEtFA2EcfU___pullback_src_0_wrt_0".