summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn Hodge <tpg@ucc.asn.au>2017-03-04 13:36:42 +0800
committerJohn Hodge <tpg@ucc.asn.au>2017-03-04 13:36:42 +0800
commit9cf7dc21aaf3ccd6967960f31443f6e6d594c362 (patch)
tree8728142bce495b9ea38dd212796be5298684bd3e /src
parent40d192c4e2ee26add4439889461fa314a195e90a (diff)
downloadmrust-9cf7dc21aaf3ccd6967960f31443f6e6d594c362.tar.gz
MIR Gen - Patch around edge case where an arm can end up with the drop flag incorrectly set
Diffstat (limited to 'src')
-rw-r--r--src/mir/mir_builder.cpp8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/mir/mir_builder.cpp b/src/mir/mir_builder.cpp
index e3c0096d..1733df2f 100644
--- a/src/mir/mir_builder.cpp
+++ b/src/mir/mir_builder.cpp
@@ -747,7 +747,7 @@ namespace
case VarState::TAG_Optional: {
// Was invalid, now optional.
auto flag_idx = new_state.as_Optional();
- if( builder.get_drop_flag_default(sp, flag_idx) != false ) {
+ if( true || 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);
@@ -757,7 +757,9 @@ namespace
TODO(sp, "Drop flag default not false when going Invalid->Optional");
#endif
}
- old_state = VarState::make_Optional( flag_idx );
+ else {
+ old_state = VarState::make_Optional( flag_idx );
+ }
return ;
}
case VarState::TAG_Partial: {
@@ -1594,7 +1596,7 @@ void MirBuilder::moved_lvalue(const Span& sp, const ::MIR::LValue& lv)
if( lvalue_is_copy(sp, lv) ) {
}
else {
- // TODO: Partial moves.
+ // TODO: Partial moves of fields.
moved_lvalue(sp, *e.val);
}
),