mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
38 lines
1.1 KiB
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)
|
|
}
|
|
|