summaryrefslogtreecommitdiff
path: root/src/mir/from_hir.cpp
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2016-08-13 16:56:24 +0800
committerJohn Hodge <tpg@mutabah.net>2016-08-13 16:56:24 +0800
commitca38d96c7979342bdf8b033cbef62d4664b13511 (patch)
treefd7f605fd7b2aaa78637ef6a2335a43f3f630043 /src/mir/from_hir.cpp
parent1c68faaba066e54aa2fd4e9272706c5dd88ca567 (diff)
downloadmrust-ca38d96c7979342bdf8b033cbef62d4664b13511.tar.gz
MIR Gen - Handle loops that diverge
Diffstat (limited to 'src/mir/from_hir.cpp')
-rw-r--r--src/mir/from_hir.cpp14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/mir/from_hir.cpp b/src/mir/from_hir.cpp
index 4c1455ef..8cbb55d2 100644
--- a/src/mir/from_hir.cpp
+++ b/src/mir/from_hir.cpp
@@ -219,7 +219,19 @@ namespace {
this->visit_node_ptr(node.m_code);
m_loop_stack.pop_back();
- m_builder.end_block( ::MIR::Terminator::make_Goto(loop_block) );
+ // If there's a stray result, drop i
+ if( m_builder.has_result() ) {
+ assert( m_builder.block_active() );
+ //::MIR::RValue res = m_builder.get_result(node.span());
+ //if( res.is_Use() ) {
+ // m_builder.push_stmt_drop( mv$(res.as_Use()) );
+ //}
+ }
+ // Terminate block with a jump back to the start
+ if( m_builder.block_active() )
+ {
+ m_builder.end_block( ::MIR::Terminator::make_Goto(loop_block) );
+ }
m_builder.set_cur_block(loop_next);
}
void visit(::HIR::ExprNode_LoopControl& node) override