summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2017-01-20 21:58:55 +0800
committerJohn Hodge <tpg@mutabah.net>2017-01-20 21:58:55 +0800
commitad4fb9a9cec423605264083415db74b97374436e (patch)
treec8b96a886a3917d4e42ced95d16323312ea22796
parent80fba399bb4a6f652a1a88e61522b73f96f1114b (diff)
downloadmrust-ad4fb9a9cec423605264083415db74b97374436e.tar.gz
MIR Gen - Invalid->Optional
-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");
}