diff options
author | John Hodge <tpg@ucc.asn.au> | 2017-03-04 13:36:42 +0800 |
---|---|---|
committer | John Hodge <tpg@ucc.asn.au> | 2017-03-04 13:36:42 +0800 |
commit | 9cf7dc21aaf3ccd6967960f31443f6e6d594c362 (patch) | |
tree | 8728142bce495b9ea38dd212796be5298684bd3e /src | |
parent | 40d192c4e2ee26add4439889461fa314a195e90a (diff) | |
download | mrust-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.cpp | 8 |
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); } ), |