summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2016-08-06 13:28:14 +0800
committerJohn Hodge <tpg@mutabah.net>2016-08-06 13:28:14 +0800
commit29e2c6e3aaffefa2ac19882282fcb93855415b01 (patch)
tree75972646437cb0c01134c2de2f33e06042415c4a
parent8717083eb95db38fb6897993bb992de00e67ee66 (diff)
downloadmrust-29e2c6e3aaffefa2ac19882282fcb93855415b01.tar.gz
HIR Typecheck CS - Fix inserted borrow in coercions
-rw-r--r--src/hir_typeck/expr_cs.cpp5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/hir_typeck/expr_cs.cpp b/src/hir_typeck/expr_cs.cpp
index 305758e6..8c8ff62d 100644
--- a/src/hir_typeck/expr_cs.cpp
+++ b/src/hir_typeck/expr_cs.cpp
@@ -2857,8 +2857,8 @@ namespace {
}
// - Otherwise, create a new borrow operation and add the dereferences
if( !node_ptr_ptr ) {
+ DEBUG("- Coercion node isn't a borrow, adding one");
auto span = node_ptr->span();
- node_ptr_ptr = &node_ptr;
::HIR::ExprNode_UniOp::Op op = ::HIR::ExprNode_UniOp::Op::Ref;
auto borrow_type = context.m_ivars.get_type(node_ptr->m_res_type).m_data.as_Borrow().type;
switch(borrow_type)
@@ -2869,6 +2869,9 @@ namespace {
}
node_ptr = ::HIR::ExprNodeP(new ::HIR::ExprNode_UniOp( mv$(span), op, mv$(node_ptr) ));
node_ptr->m_res_type = ::HIR::TypeRef::new_borrow(borrow_type, des_borrow_inner.clone());
+
+ // - Set node pointer reference to point into the new borrow op
+ node_ptr_ptr = &dynamic_cast< ::HIR::ExprNode_UniOp&>(*node_ptr).m_value;
}
else {
auto borrow_type = context.m_ivars.get_type(node_ptr->m_res_type).m_data.as_Borrow().type;