summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/hir/hir.cpp3
-rw-r--r--src/hir_typeck/expr_context.cpp8
2 files changed, 8 insertions, 3 deletions
diff --git a/src/hir/hir.cpp b/src/hir/hir.cpp
index 9b00bcc0..742a2edf 100644
--- a/src/hir/hir.cpp
+++ b/src/hir/hir.cpp
@@ -41,7 +41,8 @@ namespace {
if( right.m_data.is_Infer() ) {
// TODO: Why is this false? A _ type could match anything
- return false;
+ return left.m_data.is_Generic();
+ //return true;
}
if( right.m_data.is_Generic() ) {
return left.m_data.is_Generic();
diff --git a/src/hir_typeck/expr_context.cpp b/src/hir_typeck/expr_context.cpp
index 69f89452..da8e81b8 100644
--- a/src/hir_typeck/expr_context.cpp
+++ b/src/hir_typeck/expr_context.cpp
@@ -1137,10 +1137,14 @@ bool typeck::TypecheckContext::find_trait_impls(const ::HIR::SimplePath& trait,
slot_r = &ty;
}
};
- impl.m_type.match_generics(sp, *e2.type, cb_get_infer, cb_res);
+ bool fail = false;
+ fail |= !impl.m_type.match_test_generics(sp, *e2.type, cb_get_infer, cb_res);
for( unsigned int i = 0; i < impl.m_trait_args.m_types.size(); i ++ )
{
- impl.m_trait_args.m_types[i].match_generics(sp, e2.trait.m_params.m_types.at(i), cb_get_infer, cb_res);
+ fail |= !impl.m_trait_args.m_types[i].match_test_generics(sp, e2.trait.m_params.m_types.at(i), cb_get_infer, cb_res);
+ }
+ if( fail ) {
+ return false;
}
auto expand_placeholder = [&](const auto& ty)->const auto& {
if( ty.m_data.is_Infer() )