summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/hir_typeck/helpers.cpp11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/hir_typeck/helpers.cpp b/src/hir_typeck/helpers.cpp
index d2c60828..b6b81efc 100644
--- a/src/hir_typeck/helpers.cpp
+++ b/src/hir_typeck/helpers.cpp
@@ -2828,11 +2828,11 @@ bool TraitResolution::find_trait_impls_crate(const Span& sp,
ty_p = &this->m_ivars.get_type(tmp);
}
const auto& ty = *ty_p;
- DEBUG("[find_trait_impls_crate] - Compare " << ty << " and " << assoc_bound.second << ", matching generics");
+ DEBUG("[ftic_check_params] - Compare " << ty << " and " << assoc_bound.second << ", matching generics");
// `ty` = Monomorphised actual type (< `be.type` as `be.trait` >::`assoc_bound.first`)
// `assoc_bound.second` = Desired type (monomorphised too)
- auto cmp = assoc_bound.second .match_test_generics_fuzz(sp, ty, cb_infer, cb_match);
- switch(cmp)
+ auto cmp_i = assoc_bound.second .match_test_generics_fuzz(sp, ty, cb_infer, cb_match);
+ switch(cmp_i)
{
case ::HIR::Compare::Equal:
DEBUG("Equal");
@@ -2843,7 +2843,7 @@ bool TraitResolution::find_trait_impls_crate(const Span& sp,
case ::HIR::Compare::Fuzzy:
// TODO: When a fuzzy match is encountered on a conditional bound, returning `false` can lead to an false negative (and a compile error)
// BUT, returning `true` could lead to it being selected. (Is this a problem, should a later validation pass check?)
- DEBUG("[find_trait_impls_crate] Fuzzy match assoc bound between " << ty << " and " << assoc_bound.second);
+ DEBUG("[ftic_check_params] Fuzzy match assoc bound between " << ty << " and " << assoc_bound.second);
cmp = ::HIR::Compare::Fuzzy;
continue ;
}
@@ -3128,6 +3128,9 @@ unsigned int TraitResolution::autoderef_find_method(const Span& sp, const HIR::t
if( ty.m_data.is_Infer() ) {
return ~0u;
}
+ if(ty.m_data.is_Path() && ty.m_data.as_Path().binding.is_Unbound()) {
+ return ~0u;
+ }
auto allowed_receivers = (unconditional_allow_move || (deref_count == 0) ? AllowedReceivers::All : AllowedReceivers::AnyBorrow);
if( this->find_method(sp, traits, ivars, ty, method_name, allowed_receivers, fcn_path) ) {