| // RUN: not --crash %target-swift-emit-ir -primary-file %s |
| // REQUIRES: asserts |
| |
| // TF-756: IRGen crash for `witness_method` instruction generated by the |
| // differentiation transform. |
| |
| struct Tensor<Scalar> {} |
| extension Tensor: Differentiable where Scalar == Float {} |
| |
| extension Tensor where Scalar == Float { |
| // Arbitrary `@differentiable` operation with >1 parameter, so that index |
| // subset thunk may be generated. |
| @differentiable |
| static func + (_ lhs: Tensor, _ rhs: Tensor) -> Tensor { |
| return lhs |
| } |
| |
| @derivative(of: +) |
| static func _vjpAdd(lhs: Tensor, rhs: Tensor) |
| -> (value: Tensor, pullback: (TangentVector) -> (TangentVector, TangentVector)) { |
| return (lhs + rhs, { v in (v, v) }) |
| } |
| } |
| |
| @differentiable |
| func TF_756(input: Tensor<Float>) -> Tensor<Float> { |
| let other = Tensor<Float>() |
| return other + input |
| } |
| |
| // Assertion failed: (!type->hasArchetype() && !type->hasTypeParameter()), function getAddrOfTypeMetadataAccessFunction, file /Users/danielzheng/swift-merge/swift/lib/IRGen/GenDecl.cpp, line 3352. |
| // Stack dump: |
| // ... |
| // 1. Swift version 5.1.1-dev (Swift 3943c1e36b) |
| // 2. While emitting IR SIL function "@AD__$s4main6TensorVAASfRszlE13TangentVectorVySf_GA2FIegyyd_A2FIegyd_TR_src_0_wrt_1_differential_index_subset_thunk". |
| // for expression at [/Users/danielzheng/swift-merge/swift/test/AutoDiff/compiler_crashers/tf756-irgen-witness-method-archetype.swift:27:16 - line:27:16] RangeText="" |