summaryrefslogtreecommitdiff
path: root/src/mir/from_hir.cpp
diff options
context:
space:
mode:
authorJohn Hodge <tpg@ucc.asn.au>2017-03-02 18:20:14 +0800
committerJohn Hodge <tpg@ucc.asn.au>2017-03-02 18:20:14 +0800
commite00565479fd031681f047225cac5a26cfa94ad5e (patch)
tree900bd1907a058b69a292c7dd67c91a04203ba814 /src/mir/from_hir.cpp
parent0c7faa5fd118366c4b272e036e95625ebccf67ea (diff)
downloadmrust-e00565479fd031681f047225cac5a26cfa94ad5e.tar.gz
MIR Gen - More Param usage
Diffstat (limited to 'src/mir/from_hir.cpp')
-rw-r--r--src/mir/from_hir.cpp23
1 files changed, 16 insertions, 7 deletions
diff --git a/src/mir/from_hir.cpp b/src/mir/from_hir.cpp
index 722e3aa1..4b9b6f5e 100644
--- a/src/mir/from_hir.cpp
+++ b/src/mir/from_hir.cpp
@@ -1524,20 +1524,29 @@ namespace {
for(auto& arg : args)
{
this->visit_node_ptr(arg);
-
- if( args.size() == 1 )
+ if( !m_builder.block_active() )
+ {
+ auto tmp = m_builder.new_temporary(arg->m_res_type);
+ values.push_back( mv$(tmp) );
+ }
+ else if( args.size() == 1 )
{
values.push_back( m_builder.get_result_in_param(arg->span(), arg->m_res_type, /*allow_missing_value=*/true) );
}
else
{
- // NOTE: Have to allocate a new temporary because ordering matters
- auto tmp = m_builder.new_temporary(arg->m_res_type);
- if( m_builder.block_active() )
+ auto res = m_builder.get_result(arg->span());
+ if( auto* e = res.opt_Constant() )
{
- m_builder.push_stmt_assign( arg->span(), tmp.clone(), m_builder.get_result(arg->span()) );
+ values.push_back( mv$(*e) );
+ }
+ 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(), mv$(res) );
+ values.push_back( mv$(tmp) );
}
- values.push_back( mv$(tmp) );
}
if(const auto* e = values.back().opt_LValue() )