diff options
author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2020-04-23 22:58:52 +0100 |
---|---|---|
committer | GitHub <[email protected]> | 2020-04-23 22:58:52 +0100 |
commit | 5eb51c1e6049c61be60a28894b80a7753f06cfeb (patch) | |
tree | bea94c755a606ef3261331c1556249bd76abbcaf /crates/ra_hir_ty/src/lib.rs | |
parent | e833e037834102c829dadeff0069b9219efc047b (diff) | |
parent | 0c01b4eb6aaf86dd6a67cae7bc810916bfc20aeb (diff) |
Merge #4106
4106: Fix wrong substitution code r=matklad a=flodiebold
We need to shift in when we're substituting inside a binder.
This should fix #4053 (it doesn't fix the occasional overflow that also occurs on the Diesel codebase though).
Co-authored-by: Florian Diebold <[email protected]>
Diffstat (limited to 'crates/ra_hir_ty/src/lib.rs')
-rw-r--r-- | crates/ra_hir_ty/src/lib.rs | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/crates/ra_hir_ty/src/lib.rs b/crates/ra_hir_ty/src/lib.rs index a4b8d6683..279c06d65 100644 --- a/crates/ra_hir_ty/src/lib.rs +++ b/crates/ra_hir_ty/src/lib.rs | |||
@@ -863,7 +863,7 @@ pub trait TypeWalk { | |||
863 | &mut |ty, binders| { | 863 | &mut |ty, binders| { |
864 | if let &mut Ty::Bound(bound) = ty { | 864 | if let &mut Ty::Bound(bound) = ty { |
865 | if bound.debruijn >= binders { | 865 | if bound.debruijn >= binders { |
866 | *ty = substs.0[bound.index].clone(); | 866 | *ty = substs.0[bound.index].clone().shift_bound_vars(binders); |
867 | } | 867 | } |
868 | } | 868 | } |
869 | }, | 869 | }, |