diff options
author | John Hodge <tpg@mutabah.net> | 2016-12-27 19:28:08 +1100 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2016-12-27 19:28:08 +1100 |
commit | 15e14449ba15e234e99a231473c65cdf92ff76af (patch) | |
tree | e7e2ff7fb7f221bf40f000c92265a76bb698a298 /src/mir/from_hir.cpp | |
parent | 2ed96df45da794801df31f14111807beb31fc59d (diff) | |
download | mrust-15e14449ba15e234e99a231473c65cdf92ff76af.tar.gz |
MIR Gen - Misc fixes
Diffstat (limited to 'src/mir/from_hir.cpp')
-rw-r--r-- | src/mir/from_hir.cpp | 14 |
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() ); } |