mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
31 lines
944 B
Swift
31 lines
944 B
Swift
// RUN: %target-swift-frontend -emit-sil -verify %s
|
|
|
|
import _Differentiation
|
|
|
|
// expected-error @+1 {{function is not differentiable}}
|
|
@differentiable(reverse)
|
|
// expected-note @+1 {{when differentiating this function definition}}
|
|
func o(ff: F) -> Double {
|
|
var y = ff.i?.first { $0 >= 0.0 } ?? 0.0
|
|
while 0.0 < y {
|
|
// This one is not differentiable since rhs of ?? is an autoclosure that we cannot differentiate wrt.
|
|
// The variant below has rhs as non-active and therefore everything works.
|
|
// expected-note @+1 {{cannot differentiate through a non-differentiable argument; do you want to use 'withoutDerivative(at:)'}}
|
|
y = ff.g() ?? y
|
|
}
|
|
return y
|
|
}
|
|
|
|
func o2(ff: F) -> Double {
|
|
var y = ff.i?.first { $0 >= 0.0 } ?? 0.0
|
|
while 0.0 < y {
|
|
y = ff.g() ?? 42
|
|
}
|
|
return y
|
|
}
|
|
|
|
public struct F: Differentiable {
|
|
@noDerivative var i: [Double]? {return nil}
|
|
func g() -> Double? {return nil}
|
|
}
|