diff options
Diffstat (limited to 'src/comp')
| -rw-r--r-- | src/comp/middle/ty.rs | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/comp/middle/ty.rs b/src/comp/middle/ty.rs index 71521abb538..84532e718e5 100644 --- a/src/comp/middle/ty.rs +++ b/src/comp/middle/ty.rs @@ -2004,8 +2004,11 @@ mod unify { (ures_err(terr_mode_mismatch(expected_input.mode, actual_input.mode))); } else { expected_input.mode }; + // The variance changes (flips basically) when descending + // into arguments of function types let result = unify_step( - cx, expected_input.ty, actual_input.ty, variance); + cx, expected_input.ty, actual_input.ty, + variance_transform(variance, contravariant)); alt result { ures_ok(rty) { result_ins += [{mode: result_mode, ty: rty}]; } _ { ret fn_common_res_err(result); } |
