summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mir/mir_builder.cpp14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/mir/mir_builder.cpp b/src/mir/mir_builder.cpp
index a76129d2..4523288e 100644
--- a/src/mir/mir_builder.cpp
+++ b/src/mir/mir_builder.cpp
@@ -719,13 +719,21 @@ namespace
// Allocate a drop flag
old_state = VarState::make_Optional( builder.new_drop_flag_and_set(sp, true) );
return ;
- case VarState::TAG_Optional:
+ case VarState::TAG_Optional: {
// Was invalid, now optional.
- if( builder.get_drop_flag_default( sp, new_state.as_Optional() ) != false ) {
+ auto flag_idx = new_state.as_Optional();
+ if( builder.get_drop_flag_default(sp, flag_idx) != false ) {
+ #if 1
+ auto new_flag = builder.new_drop_flag(false);
+ builder.push_stmt_set_dropflag_other(sp, new_flag, flag_idx);
+ old_state = VarState::make_Optional( new_flag );
+ #else
TODO(sp, "Drop flag default not false when going Invalid->Optional");
+ #endif
}
- old_state = VarState::make_Optional( new_state.as_Optional() );
+ old_state = VarState::make_Optional( flag_idx );
return ;
+ }
case VarState::TAG_Partial:
TODO(sp, "Handle Invalid->Partial in split scope");
}