diff options
Diffstat (limited to 'crates/hir_ty/src/infer/expr.rs')
-rw-r--r-- | crates/hir_ty/src/infer/expr.rs | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/crates/hir_ty/src/infer/expr.rs b/crates/hir_ty/src/infer/expr.rs index 0be8c5a90..93548b6c0 100644 --- a/crates/hir_ty/src/infer/expr.rs +++ b/crates/hir_ty/src/infer/expr.rs | |||
@@ -18,7 +18,7 @@ use crate::{ | |||
18 | lower::lower_to_chalk_mutability, | 18 | lower::lower_to_chalk_mutability, |
19 | method_resolution, op, | 19 | method_resolution, op, |
20 | primitive::{self, UintTy}, | 20 | primitive::{self, UintTy}, |
21 | to_assoc_type_id, | 21 | to_assoc_type_id, to_chalk_trait_id, |
22 | traits::{chalk::from_chalk, FnTrait, InEnvironment}, | 22 | traits::{chalk::from_chalk, FnTrait, InEnvironment}, |
23 | utils::{generics, variant_data, Generics}, | 23 | utils::{generics, variant_data, Generics}, |
24 | AdtId, Binders, CallableDefId, FnPointer, FnSig, Interner, Obligation, Rawness, Scalar, | 24 | AdtId, Binders, CallableDefId, FnPointer, FnSig, Interner, Obligation, Rawness, Scalar, |
@@ -90,8 +90,10 @@ impl<'a> InferenceContext<'a> { | |||
90 | Substitution::build_for_generics(&generic_params).push(ty.clone()).push(arg_ty).build(); | 90 | Substitution::build_for_generics(&generic_params).push(ty.clone()).push(arg_ty).build(); |
91 | 91 | ||
92 | let trait_env = Arc::clone(&self.trait_env); | 92 | let trait_env = Arc::clone(&self.trait_env); |
93 | let implements_fn_trait = | 93 | let implements_fn_trait = Obligation::Trait(TraitRef { |
94 | Obligation::Trait(TraitRef { trait_: fn_once_trait, substs: substs.clone() }); | 94 | trait_id: to_chalk_trait_id(fn_once_trait), |
95 | substitution: substs.clone(), | ||
96 | }); | ||
95 | let goal = self.canonicalizer().canonicalize_obligation(InEnvironment { | 97 | let goal = self.canonicalizer().canonicalize_obligation(InEnvironment { |
96 | value: implements_fn_trait.clone(), | 98 | value: implements_fn_trait.clone(), |
97 | environment: trait_env, | 99 | environment: trait_env, |
@@ -948,7 +950,10 @@ impl<'a> InferenceContext<'a> { | |||
948 | // construct a TraitDef | 950 | // construct a TraitDef |
949 | let substs = | 951 | let substs = |
950 | parameters.prefix(generics(self.db.upcast(), trait_.into()).len()); | 952 | parameters.prefix(generics(self.db.upcast(), trait_.into()).len()); |
951 | self.obligations.push(Obligation::Trait(TraitRef { trait_, substs })); | 953 | self.obligations.push(Obligation::Trait(TraitRef { |
954 | trait_id: to_chalk_trait_id(trait_), | ||
955 | substitution: substs, | ||
956 | })); | ||
952 | } | 957 | } |
953 | } | 958 | } |
954 | CallableDefId::StructId(_) | CallableDefId::EnumVariantId(_) => {} | 959 | CallableDefId::StructId(_) | CallableDefId::EnumVariantId(_) => {} |