summaryrefslogtreecommitdiff
path: root/src/mir/from_hir.cpp
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2016-12-25 17:19:06 +1100
committerJohn Hodge <tpg@mutabah.net>2016-12-25 17:19:06 +1100
commit27b0292ca6828eed7e782a57ad4d641f0ebf7357 (patch)
treed453c1936058b6a4be061a3b418abe0fc80cecbb /src/mir/from_hir.cpp
parent9c7978323aaf7b1c9f9840b7665f43b59f4de282 (diff)
downloadmrust-27b0292ca6828eed7e782a57ad4d641f0ebf7357.tar.gz
MIR Gen - Misc fixes for drop order quirks
Diffstat (limited to 'src/mir/from_hir.cpp')
-rw-r--r--src/mir/from_hir.cpp6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/mir/from_hir.cpp b/src/mir/from_hir.cpp
index 272cea48..c50806f5 100644
--- a/src/mir/from_hir.cpp
+++ b/src/mir/from_hir.cpp
@@ -1804,7 +1804,11 @@ namespace {
assert( !values_set[idx] );
values_set[idx] = true;
this->visit_node_ptr(valnode);
- values.at(idx) = m_builder.lvalue_or_temp( valnode->span(), valnode->m_res_type, m_builder.get_result(valnode->span()) );
+
+ // NOTE: Have to allocate a new temporary because ordering matters
+ auto tmp = m_builder.new_temporary(valnode->m_res_type);
+ m_builder.push_stmt_assign( valnode->span(), tmp.clone(), m_builder.get_result(valnode->span()) );
+ values.at(idx) = mv$(tmp);
}
for(unsigned int i = 0; i < values.size(); i ++)
{