summaryrefslogtreecommitdiff
path: root/src/mir/from_hir.cpp
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2016-12-27 19:28:08 +1100
committerJohn Hodge <tpg@mutabah.net>2016-12-27 19:28:08 +1100
commit15e14449ba15e234e99a231473c65cdf92ff76af (patch)
treee7e2ff7fb7f221bf40f000c92265a76bb698a298 /src/mir/from_hir.cpp
parent2ed96df45da794801df31f14111807beb31fc59d (diff)
downloadmrust-15e14449ba15e234e99a231473c65cdf92ff76af.tar.gz
MIR Gen - Misc fixes
Diffstat (limited to 'src/mir/from_hir.cpp')
-rw-r--r--src/mir/from_hir.cpp14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/mir/from_hir.cpp b/src/mir/from_hir.cpp
index 288a724a..bdc3dda2 100644
--- a/src/mir/from_hir.cpp
+++ b/src/mir/from_hir.cpp
@@ -1415,7 +1415,19 @@ namespace {
for(auto& arg : node.m_args)
{
this->visit_node_ptr(arg);
- values.push_back( m_builder.get_result_in_lvalue(arg->span(), arg->m_res_type) );
+
+ if( node.m_args.size() == 1 )
+ {
+ values.push_back( m_builder.get_result_in_lvalue(arg->span(), arg->m_res_type) );
+ }
+ else
+ {
+ // NOTE: Have to allocate a new temporary because ordering matters
+ auto tmp = m_builder.new_temporary(arg->m_res_type);
+ m_builder.push_stmt_assign( arg->span(), tmp.clone(), m_builder.get_result(arg->span()) );
+ values.push_back( mv$(tmp) );
+ }
+
m_builder.moved_lvalue( arg->span(), values.back() );
}