summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Hodge <tpg@ucc.asn.au>2017-09-06 21:44:29 +0800
committerJohn Hodge <tpg@ucc.asn.au>2017-09-06 21:44:29 +0800
commitc5292971bcc621df9974b241ef7b5b926df4a9ec (patch)
treecddfab3c2f5f1437e61065c96a24e00b63778eb7
parent6ccee8db1e838a9c0c1c2c65a4a5c2a413cb5304 (diff)
downloadmrust-c5292971bcc621df9974b241ef7b5b926df4a9ec.tar.gz
HIR Expand - Reborrow in `box`
-rw-r--r--src/hir_expand/closures.cpp2
-rw-r--r--src/hir_expand/reborrow.cpp4
2 files changed, 6 insertions, 0 deletions
diff --git a/src/hir_expand/closures.cpp b/src/hir_expand/closures.cpp
index b58f2398..3b0fb6a4 100644
--- a/src/hir_expand/closures.cpp
+++ b/src/hir_expand/closures.cpp
@@ -943,6 +943,8 @@ namespace {
if( m_resolve.type_is_copy(sp, m_variable_types.at(slot)) ) {
usage = ::HIR::ValueUsage::Borrow;
}
+ // Wait, is this valid?
+ // - Maybe it's needed becuase reborrow is after this pass?
else if( m_variable_types.at(slot).m_data.is_Borrow() && m_variable_types.at(slot).m_data.as_Borrow().type == ::HIR::BorrowType::Unique ) {
usage = ::HIR::ValueUsage::Mutate;
}
diff --git a/src/hir_expand/reborrow.cpp b/src/hir_expand/reborrow.cpp
index b6f6aeb4..d1b08f54 100644
--- a/src/hir_expand/reborrow.cpp
+++ b/src/hir_expand/reborrow.cpp
@@ -87,6 +87,10 @@ namespace {
return node_ptr;
}
+ void visit(::HIR::ExprNode_Emplace& node) override {
+ ::HIR::ExprVisitorDef::visit(node);
+ node.m_value = do_reborrow(mv$(node.m_value));
+ }
void visit(::HIR::ExprNode_Assign& node) override {
::HIR::ExprVisitorDef::visit(node);
node.m_value = do_reborrow(mv$(node.m_value));