Skip to content

Commit d99d8da

Browse files
author
marcrasi
authored
[AutoDiff upstream] handle differentiable_function in DiagnoseInvalidEscapingCaptures (#30909)
1 parent 0678aa6 commit d99d8da

File tree

2 files changed

+20
-0
lines changed

2 files changed

+20
-0
lines changed

lib/SILOptimizer/Mandatory/DiagnoseInvalidEscapingCaptures.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,12 @@ static bool checkNoEscapePartialApplyUse(Operand *oper, FollowUse followUses) {
7878
return false;
7979
}
8080

81+
// Look through `differentiable_function`.
82+
if (auto *DFI = dyn_cast<DifferentiableFunctionInst>(user)) {
83+
followUses(DFI);
84+
return false;
85+
}
86+
8187
// @noescape block storage can be passed as an Optional (Nullable).
8288
if (auto *EI = dyn_cast<EnumInst>(user)) {
8389
followUses(EI);
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
// RUN: %target-swift-frontend -emit-sil -verify %s
2+
3+
// Tests that differentiation features interact correctly with non-differentiation SILOptimizer
4+
// passes.
5+
6+
import _Differentiation
7+
8+
// - MARK: DiagnoseInvalidEscapingCaptures
9+
10+
func nonEscapingUseOfDifferentiableFunction(_ f: @differentiable (Float) -> Float) {}
11+
func testDiagnoseInvalidEscapingCaptures(_ f: @differentiable (Float) -> Float) {
12+
// Should not be diagnosed as invalid escaping capture.
13+
nonEscapingUseOfDifferentiableFunction { f($0) }
14+
}

0 commit comments

Comments
 (0)