[AutoDiff] Improve @derivative attribute diagnostics.

Previously, `@derivative` attribute type-checking produced a confusing error
referencing unbound types `T` and `U`:

```
'@derivative(of:)' attribute requires function to return a two-element tuple of
type '(value: T..., pullback: (U.TangentVector) -> T.TangentVector...)' or
'(value: T..., differential: (T.TangentVector...) -> U.TangentVector)'
```

Now, the error is less confusing:

```
'@derivative(of:)' attribute requires function to return a two-element tuple;
first element must have label 'value:' and second element must have label
'pullback:' or 'differential:'
```
This commit is contained in:
Dan Zheng
2020-02-19 04:43:47 +00:00
parent 6616e812c6
commit 2c70f0ae6c
2 changed files with 9 additions and 9 deletions

View File

@@ -2972,18 +2972,18 @@ NOTE(protocol_witness_missing_differentiable_attr,none,
// @derivative
ERROR(derivative_attr_expected_result_tuple,none,
"'@derivative(of:)' attribute requires function to return a two-element "
"tuple of type '(value: T..., pullback: (U.TangentVector) -> T.TangentVector...)' "
"or '(value: T..., differential: (T.TangentVector...) -> U.TangentVector)'", ())
"tuple; first element must have label 'value:' and second element must "
"have label 'pullback:' or 'differential:'", ())
ERROR(derivative_attr_invalid_result_tuple_value_label,none,
"'@derivative(of:)' attribute requires function to return a two-element "
"tuple (first element must have label 'value:')", ())
"tuple; first element must have label 'value:'", ())
ERROR(derivative_attr_invalid_result_tuple_func_label,none,
"'@derivative(of:)' attribute requires function to return a two-element "
"tuple (second element must have label 'pullback:' or 'differential:')",
"tuple; second element must have label 'pullback:' or 'differential:'",
())
ERROR(derivative_attr_result_value_not_differentiable,none,
"'@derivative(of:)' attribute requires function to return a two-element "
"tuple (first element type %0 must conform to 'Differentiable')", (Type))
"tuple; first element type %0 must conform to 'Differentiable'", (Type))
ERROR(derivative_attr_result_func_type_mismatch,none,
"function result's %0 type does not match %1", (Identifier, DeclName))
NOTE(derivative_attr_result_func_type_mismatch_note,none,