summaryrefslogtreecommitdiff
path: root/src/mir/mir_builder.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mir/mir_builder.cpp')
-rw-r--r--src/mir/mir_builder.cpp10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/mir/mir_builder.cpp b/src/mir/mir_builder.cpp
index 893dcffa..9b97794d 100644
--- a/src/mir/mir_builder.cpp
+++ b/src/mir/mir_builder.cpp
@@ -259,9 +259,9 @@ void MirBuilder::push_stmt_drop(::MIR::LValue val)
void MirBuilder::set_cur_block(unsigned int new_block)
{
- if( m_block_active ) {
- BUG(Span(), "Updating block when previous is active");
- }
+ ASSERT_BUG(Span(), !m_block_active, "Updating block when previous is active");
+ ASSERT_BUG(Span(), new_block < m_output.blocks.size(), "Invalid block ID being started - " << new_block);
+ ASSERT_BUG(Span(), m_output.blocks[new_block].terminator.is_Incomplete(), "Attempting to resume a completed block - BB" << new_block);
DEBUG("BB" << new_block << " START");
m_current_block = new_block;
m_block_active = true;
@@ -276,14 +276,16 @@ void MirBuilder::end_block(::MIR::Terminator term)
m_block_active = false;
m_current_block = 0;
}
-void MirBuilder::pause_cur_block()
+::MIR::BasicBlockId MirBuilder::pause_cur_block()
{
if( !m_block_active ) {
BUG(Span(), "Pausing block when none active");
}
DEBUG("BB" << m_current_block << " PAUSE");
m_block_active = false;
+ auto rv = m_current_block;
m_current_block = 0;
+ return rv;
}
::MIR::BasicBlockId MirBuilder::new_bb_linked()
{