Files
swift-mirror/test/AutoDiff/compiler_crashers_fixed/issue-57527-diff-capture.swift

38 lines
1.1 KiB
Swift

// RUN: %target-swift-frontend -emit-sil -verify %s
// https://github.com/apple/swift/issues/57527
// Fix assertions related to captured arguments, they should be treated
// as constants.
import _Differentiation
func outerFunc(value: inout Float) -> (Float, (Float) -> (Float, Float)) {
@differentiable(reverse, wrt: param)
func innerFunc(param: Float, other: Float) -> Float {
value += param * other
return value * param * 2.0
}
let valAndPullback = valueWithPullback(at: value, 2.0, of: innerFunc)
return (value + valAndPullback.value, valAndPullback.pullback)
}
func outerFunc2(value: inout Float) -> (Float, (Float) -> Float) {
@differentiable(reverse, wrt: param)
func innerFunc(param: Float, other: Float) -> Float {
value += param * other
return value * param * 2.0
}
@differentiable(reverse)
func curriedFunc(param: Float) -> Float {
return innerFunc(param: param, other: 3.0)
}
let valAndPullback = valueWithPullback(at: value, of: curriedFunc)
return (value + valAndPullback.value, valAndPullback.pullback)
}