diff options
author | John Hodge <tpg@mutabah.net> | 2017-01-22 16:03:39 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2017-01-22 16:03:39 +0800 |
commit | bce6d762ae4977d9b8ebfafa326a6e0c838e1914 (patch) | |
tree | dc21e662156c4ee5d2548d6948b41e5f627deb36 /src | |
parent | 744493f71413dac43e91c46dc701c2d704e549a2 (diff) | |
download | mrust-bce6d762ae4977d9b8ebfafa326a6e0c838e1914.tar.gz |
MIR Builder - Drop flags for Partial
Diffstat (limited to 'src')
-rw-r--r-- | src/mir/mir_builder.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/mir/mir_builder.cpp b/src/mir/mir_builder.cpp index 1bc38a50..6f59e1de 100644 --- a/src/mir/mir_builder.cpp +++ b/src/mir/mir_builder.cpp @@ -727,6 +727,10 @@ namespace auto out = new_state.clone(); auto& ose = out.as_Partial(); + if( ose.outer_flag == ~0u ) + { + ose.outer_flag = builder.new_drop_flag_and_set(sp, true); // Only in this arm is the container valid + } if( is_box ) { merge_state(sp, builder, ::MIR::LValue::make_Deref({ box$(lv.clone()) }), ose.inner_states[0], old_state); } @@ -788,9 +792,13 @@ namespace builder.push_stmt_set_dropflag_val(sp, nse.outer_flag, true); } } - + auto out = new_state.clone(); auto& ose = out.as_Partial(); + if( ose.outer_flag == ~0u ) + { + ose.outer_flag = builder.new_drop_flag(true); // In both arms, the container is valid + } if( is_box ) { merge_state(sp, builder, ::MIR::LValue::make_Deref({ box$(lv.clone()) }), ose.inner_states[0], old_state); } |