summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/hir_typeck/helpers.cpp1
-rw-r--r--src/hir_typeck/outer.cpp2
-rw-r--r--src/hir_typeck/static.cpp4
3 files changed, 5 insertions, 2 deletions
diff --git a/src/hir_typeck/helpers.cpp b/src/hir_typeck/helpers.cpp
index f3d29a46..a4cdccda 100644
--- a/src/hir_typeck/helpers.cpp
+++ b/src/hir_typeck/helpers.cpp
@@ -1583,6 +1583,7 @@ void TraitResolution::expand_associated_types__UfcsKnown(const Span& sp, ::HIR::
// TODO: If the type is a generic or an opaque associated, we can't know.
// - If the trait contains any of the above, it's unknowable
// - Otherwise, it's an error
+ DEBUG("Assuming that " << input << " is an opaque name");
e.binding = ::HIR::TypeRef::TypePathBinding::make_Opaque({});
DEBUG("Couldn't resolve associated type for " << input << " (and won't ever be able to)");
}
diff --git a/src/hir_typeck/outer.cpp b/src/hir_typeck/outer.cpp
index cb27ffe5..1ce83e57 100644
--- a/src/hir_typeck/outer.cpp
+++ b/src/hir_typeck/outer.cpp
@@ -244,6 +244,7 @@ namespace {
(UfcsKnown,
if( pe.type->m_data.is_Path() && pe.type->m_data.as_Path().binding.is_Opaque() ) {
// - Opaque type, opaque result
+ DEBUG("Inner type opaque, assuming " << ty << " also opaque");
e.binding = ::HIR::TypeRef::TypePathBinding::make_Opaque({});
}
else if( pe.type->m_data.is_Generic() ) {
@@ -265,6 +266,7 @@ namespace {
// If the type is still specialisable, and there's geerics in the type.
if( best_impl.type_is_specializable(pe.item.c_str()) && pe.type->contains_generics() ) {
// Mark it as opaque (because monomorphisation could change things)
+ DEBUG("Still-specialisable impl for " << ty << " also opaque");
e.binding = ::HIR::TypeRef::TypePathBinding::make_Opaque({});
}
else {
diff --git a/src/hir_typeck/static.cpp b/src/hir_typeck/static.cpp
index 85b27ee1..a3bd3b27 100644
--- a/src/hir_typeck/static.cpp
+++ b/src/hir_typeck/static.cpp
@@ -344,8 +344,8 @@ void StaticTraitResolve::expand_associated_types(const Span& sp, ::HIR::TypeRef&
});
if( rv ) {
if( assume_opaque ) {
- DEBUG("Assuming that " << input << " is an opaque name");
input.m_data.as_Path().binding = ::HIR::TypeRef::TypePathBinding::make_Opaque({});
+ DEBUG("Assuming that " << input << " is an opaque name");
}
this->expand_associated_types(sp, input);
return;
@@ -424,7 +424,7 @@ void StaticTraitResolve::expand_associated_types(const Span& sp, ::HIR::TypeRef&
// - If the trait contains any of the above, it's unknowable
// - Otherwise, it's an error
e.binding = ::HIR::TypeRef::TypePathBinding::make_Opaque({});
- DEBUG("Couldn't resolve associated type for " << input << " (and won't ever be able to)");
+ DEBUG("Couldn't resolve associated type for " << input << " (and won't ever be able to, assuming opaque)");
//}
//else {
// DEBUG("Couldn't resolve associated type for " << input << " (will try again later)");