summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2017-01-22 16:03:39 +0800
committerJohn Hodge <tpg@mutabah.net>2017-01-22 16:03:39 +0800
commitbce6d762ae4977d9b8ebfafa326a6e0c838e1914 (patch)
treedc21e662156c4ee5d2548d6948b41e5f627deb36 /src
parent744493f71413dac43e91c46dc701c2d704e549a2 (diff)
downloadmrust-bce6d762ae4977d9b8ebfafa326a6e0c838e1914.tar.gz
MIR Builder - Drop flags for Partial
Diffstat (limited to 'src')
-rw-r--r--src/mir/mir_builder.cpp10
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);
}