[AutoDiff] Eliminate flow-sensitivity in '@differentiable' closure conversions. #25688
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
@differentiable
function conversion from a non-@differentiable
function is handled by inserting anAutoDiffFunctionExpr
in CSApply when the contextual type is@differentiable
. This is similar to C function poster conversion. One thing that we have not checked during these conversions is whether the original function expression is a literal closure expression or a reference to afunc
declaration. Lacking this check made@differentiable
closure conversion flow-sensitive, which caused many semantic inconsistencies as described in TF-577.This patch makes
@differentiable
closure conversion only valid when the from-expression is a literal closure expression or a reference to afunc
declaration. This eliminates all flow-sensitivity in@differentiable
closure conversions.In common cases where a user writes a higher-order function that differentiates the argument closure but forgets to make the parameter have a
@differentiable
or@differentiable(linear)
function type, we produce a note and a fix-it to insert a@differentiable
or@differentiable(linear)
attribute to the parameter's type signature.