| // 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". |