summaryrefslogtreecommitdiff
path: root/src/hir_expand/annotate_value_usage.cpp
diff options
context:
space:
mode:
authorJohn Hodge <tpg@ucc.asn.au>2019-01-03 23:11:35 +0800
committerJohn Hodge <tpg@ucc.asn.au>2019-01-03 23:11:35 +0800
commit777bdf9a8bfcd6a5b1b4c38c6a57f582fc9d5d18 (patch)
treebec0f22d76a3b2f64f85f167250720ace3aa6195 /src/hir_expand/annotate_value_usage.cpp
parent17c5d0e1d12229f6b720708748723811f7f2acd3 (diff)
downloadmrust-777bdf9a8bfcd6a5b1b4c38c6a57f582fc9d5d18.tar.gz
HIR Expand - Handle match ergonomics in AVU
Diffstat (limited to 'src/hir_expand/annotate_value_usage.cpp')
-rw-r--r--src/hir_expand/annotate_value_usage.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/hir_expand/annotate_value_usage.cpp b/src/hir_expand/annotate_value_usage.cpp
index 693c7745..f5acbbc5 100644
--- a/src/hir_expand/annotate_value_usage.cpp
+++ b/src/hir_expand/annotate_value_usage.cpp
@@ -452,12 +452,20 @@ namespace {
throw "";
}
- ::HIR::ValueUsage get_usage_for_pattern(const Span& sp, const ::HIR::Pattern& pat, const ::HIR::TypeRef& ty) const
+ ::HIR::ValueUsage get_usage_for_pattern(const Span& sp, const ::HIR::Pattern& pat, const ::HIR::TypeRef& outer_ty) const
{
if( pat.m_binding.is_valid() ) {
- return get_usage_for_pattern_binding(sp, pat.m_binding, ty);
+ return get_usage_for_pattern_binding(sp, pat.m_binding, outer_ty);
}
+ // Implicit derefs
+ const ::HIR::TypeRef* typ = &outer_ty;
+ for(size_t i = 0; i < pat.m_implicit_deref_count; i ++)
+ {
+ typ = &*typ->m_data.as_Borrow().inner;
+ }
+ const ::HIR::TypeRef& ty = *typ;
+
TU_MATCHA( (pat.m_data), (pe),
(Any,
return ::HIR::ValueUsage::Borrow;