diff options
author | John Hodge <tpg@mutabah.net> | 2016-12-24 17:08:47 +1100 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2016-12-24 17:08:47 +1100 |
commit | 9c7978323aaf7b1c9f9840b7665f43b59f4de282 (patch) | |
tree | 295cb544b72b58abcf2eb4771f492fa748f2e2e1 /src/mir/from_hir_match.cpp | |
parent | 469d79c437e2be320bfe12a28c350a12bae1bc06 (diff) | |
download | mrust-9c7978323aaf7b1c9f9840b7665f43b59f4de282.tar.gz |
MIR Gen - Fix some bugs exposed by extended validation
Diffstat (limited to 'src/mir/from_hir_match.cpp')
-rw-r--r-- | src/mir/from_hir_match.cpp | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/mir/from_hir_match.cpp b/src/mir/from_hir_match.cpp index f191f3fa..5b425976 100644 --- a/src/mir/from_hir_match.cpp +++ b/src/mir/from_hir_match.cpp @@ -251,6 +251,7 @@ void MIR_LowerHIR_Match( MirBuilder& builder, MirConverter& conv, ::HIR::ExprNod // - Define variables from the first pattern conv.define_vars_from(node.span(), arm.m_patterns.front()); + auto pat_scope = builder.new_scope_split(node.span()); for( unsigned int pat_idx = 0; pat_idx < arm.m_patterns.size(); pat_idx ++ ) { const auto& pat = arm.m_patterns[pat_idx]; @@ -273,7 +274,9 @@ void MIR_LowerHIR_Match( MirBuilder& builder, MirConverter& conv, ::HIR::ExprNod conv.destructure_from( arm.m_code->span(), pat, match_val.clone(), true ); builder.pause_cur_block(); // NOTE: Paused block resumed upon successful match + builder.end_split_arm( arm.m_code->span(), pat_scope, true ); } + builder.terminate_scope( arm.m_code->span(), mv$(pat_scope) ); // TODO: If this pattern ignores fields with Drop impls, this will lead to leaks. // - Ideally, this would trigger a drop of whatever wasn't already taken by the pattern. |