// RUN: %target-swift-emit-sil %s
// REQUIRES: asserts

// TF-923: Ownership verification error in pullback function generated by the
// differentiation transform.
// Adjoint value of basic block argument is destroyed at end of pullback block
// (because it's a temporary value), but is also set as adjoint value of
// incoming values, causing use-after-free errors in pullback successor blocks.

struct Tensor<Scalar> {
  class Box {
    init() {}
  }
  var box: Box = Box()
}
extension Tensor: Equatable where Scalar: Equatable {
  static func ==(_: Self, _: Self) -> Bool { fatalError() }
}
extension Tensor: AdditiveArithmetic where Scalar: AdditiveArithmetic {
  static var zero: Self { fatalError() }
  static func +(_: Self, _: Self) -> Self { fatalError() }
  static func -(_: Self, _: Self) -> Self { fatalError() }
}
extension Tensor: Differentiable where Scalar: Differentiable & AdditiveArithmetic {
  typealias TangentVector = Self
}

struct Tuple<T: Differentiable & AdditiveArithmetic>: Differentiable {
  var first: Tensor<T>
  @noDerivative var second: Tensor<T>
}

@differentiable(wrt: (input))
func TF_923<T>(_ input: Tensor<T>, _ bool: Bool) -> Tuple<T> {
  let x = bool ? input : input
  return Tuple(first: x, second: x)
}

// Function: 'AD__$s4main6TF_923yAA5TupleVyxGAA6TensorVyxG_Sbts18AdditiveArithmeticRzs14DifferentiableRzlF__pullback_src_0_wrt_0'
// Found use after free due to unvisited non lifetime ending uses?!
// Value:   %22 = load [take] %10 : $*Tensor<τ_0_0>        // users: %88, %60, %47
//     Remaining Users:
// User:   %60 = copy_value %22 : $Tensor<τ_0_0>          // user: %65
// User:   %88 = copy_value %22 : $Tensor<τ_0_0>          // user: %93
