diff options
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() ); } |