Files
swift-mirror/test/AutoDiff/compiler_crashers_fixed/issue-74841-optional-adjoint-buffer.swift
Anton Korobeynikov f8141e27b1 Ensure we are materializing adjoint value into buffer correctly for optionals: (#74964)
- Ue enum $Optional<T.TangentVector>, #Optional.some!enumelt, %wrappedAdjoint : $T for objects
- Use inject_enum_addr %optArgBuf : $*Optional<T.TangentVector>, #Optional.some!enumelt for addresses

Fixes #74841
2024-07-04 20:53:59 -07:00

14 lines
546 B
Swift

// RUN: %target-swift-frontend -emit-sil -verify %s
// https://github.com/swiftlang/swift/issues/74841
// We used to create invalid adjoint buffer for Optional<T>
// if this buffer originated from unchecked_take_enum_data_addr
// instruction
import _Differentiation;
struct F<I> {subscript(_ i: Int) -> S<I>? {get {nil} set {}}}
struct S<I> {subscript(_ i: Int) -> I? {get {nil} set {}}}
extension F: Differentiable {}
extension S: Differentiable {}
struct A{@differentiable(reverse) func b(c: inout F<Double>, d: S<Double>) {c[0]![0] = 0}}