mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
Until folks look at whats wrong. This triggered a use-after-free in IRGen while visiting end_apply on the ASAN bot. https://ci.swift.org/job/oss-swift-incremental-ASAN-RA-macos/7721/ Likely triggered by the changes in https://github.com/swiftlang/swift/pull/79127 (based on blame list) rdar://144216380
83 lines
1.5 KiB
Swift
83 lines
1.5 KiB
Swift
// REQUIRES: rdar144216380
|
|
|
|
// RUN: %target-run-simple-swift
|
|
// REQUIRES: executable_test
|
|
|
|
// This test fails on arm64e with a pointer auth failure.
|
|
// XFAIL: CPU=arm64e
|
|
|
|
import _Differentiation
|
|
import StdlibUnittest
|
|
|
|
var ModifyAccessorTests = TestSuite("ModifyAccessor")
|
|
|
|
ModifyAccessorTests.test("SimpleModifyAccessor") {
|
|
struct S: Differentiable {
|
|
private var _x : Float
|
|
|
|
func _endMutation() {}
|
|
|
|
var x: Float {
|
|
get{_x}
|
|
set(newValue) { _x = newValue }
|
|
_modify {
|
|
defer { _endMutation() }
|
|
if (x > 0) {
|
|
yield &_x
|
|
} else {
|
|
yield &_x
|
|
}
|
|
}
|
|
}
|
|
|
|
init(_ x : Float) {
|
|
self._x = x
|
|
}
|
|
}
|
|
|
|
func modify_struct(_ x : Float) -> Float {
|
|
var s = S(x)
|
|
s.x *= s.x
|
|
return s.x
|
|
}
|
|
|
|
expectEqual((100, 20), valueWithGradient(at: 10, of: modify_struct))
|
|
}
|
|
|
|
ModifyAccessorTests.test("GenericModifyAccessor") {
|
|
struct S<T : Differentiable & SignedNumeric & Comparable>: Differentiable {
|
|
private var _x : T
|
|
|
|
func _endMutation() {}
|
|
|
|
var x: T {
|
|
get{_x}
|
|
set(newValue) { _x = newValue }
|
|
_modify {
|
|
defer { _endMutation() }
|
|
if (x > -x) {
|
|
yield &_x
|
|
} else {
|
|
yield &_x
|
|
}
|
|
}
|
|
}
|
|
|
|
init(_ x : T) {
|
|
self._x = x
|
|
}
|
|
}
|
|
|
|
func modify_struct(_ x : Float) -> Float {
|
|
var s = S<Float>(x)
|
|
s.x *= s.x
|
|
return s.x
|
|
}
|
|
|
|
expectEqual((100, 20), valueWithGradient(at: 10, of: modify_struct))
|
|
}
|
|
|
|
|
|
runAllTests()
|
|
|