summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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);
}