diff options
author | John Hodge <tpg@ucc.asn.au> | 2017-05-06 09:15:46 +0800 |
---|---|---|
committer | John Hodge <tpg@ucc.asn.au> | 2017-05-06 09:15:46 +0800 |
commit | dbcfef417cf056b5e466ad9e1d3afc90fbdccb62 (patch) | |
tree | 338bc2cc44c37446ea2646d34e3224e55fe4f6ba /src | |
parent | b180b4452b3e6a337b28dacd8a649373f9c738d8 (diff) | |
download | mrust-dbcfef417cf056b5e466ad9e1d3afc90fbdccb62.tar.gz |
MIR Gen - Fix incorrect scoping of for loop values
Diffstat (limited to 'src')
-rw-r--r-- | src/mir/from_hir.cpp | 4 |
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 ); } |