diff options
author | John Hodge <tpg@mutabah.net> | 2016-08-13 16:56:24 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2016-08-13 16:56:24 +0800 |
commit | ca38d96c7979342bdf8b033cbef62d4664b13511 (patch) | |
tree | fd7f605fd7b2aaa78637ef6a2335a43f3f630043 /src/mir/from_hir.cpp | |
parent | 1c68faaba066e54aa2fd4e9272706c5dd88ca567 (diff) | |
download | mrust-ca38d96c7979342bdf8b033cbef62d4664b13511.tar.gz |
MIR Gen - Handle loops that diverge
Diffstat (limited to 'src/mir/from_hir.cpp')
-rw-r--r-- | src/mir/from_hir.cpp | 14 |
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 |