summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn Hodge <tpg@ucc.asn.au>2017-05-06 09:15:46 +0800
committerJohn Hodge <tpg@ucc.asn.au>2017-05-06 09:15:46 +0800
commitdbcfef417cf056b5e466ad9e1d3afc90fbdccb62 (patch)
tree338bc2cc44c37446ea2646d34e3224e55fe4f6ba /src
parentb180b4452b3e6a337b28dacd8a649373f9c738d8 (diff)
downloadmrust-dbcfef417cf056b5e466ad9e1d3afc90fbdccb62.tar.gz
MIR Gen - Fix incorrect scoping of for loop values
Diffstat (limited to 'src')
-rw-r--r--src/mir/from_hir.cpp4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/mir/from_hir.cpp b/src/mir/from_hir.cpp
index 5d94e5c3..98aa74d8 100644
--- a/src/mir/from_hir.cpp
+++ b/src/mir/from_hir.cpp
@@ -549,6 +549,8 @@ namespace {
auto loop_block = m_builder.new_bb_linked();
auto loop_next = m_builder.new_bb_unlinked();
+ auto loop_tmp_scope = m_builder.new_scope_temp(node.span());
+
m_loop_stack.push_back( LoopDesc { mv$(loop_body_scope), node.m_label, loop_block, loop_next } );
this->visit_node_ptr(node.m_code);
auto loop_scope = mv$(m_loop_stack.back().scope);
@@ -566,12 +568,14 @@ namespace {
{
DEBUG("- Reached end, loop back");
// Insert drop of all scopes within the current scope
+ m_builder.terminate_scope( node.span(), mv$(loop_tmp_scope) );
m_builder.terminate_scope( node.span(), mv$(loop_scope) );
m_builder.end_block( ::MIR::Terminator::make_Goto(loop_block) );
}
else
{
// Terminate scope without emitting cleanup (cleanup was handled by `break`)
+ m_builder.terminate_scope( node.span(), mv$(loop_tmp_scope), false );
m_builder.terminate_scope( node.span(), mv$(loop_scope), false );
}