summaryrefslogtreecommitdiff
path: root/src/mir/from_hir_match.cpp
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2016-12-24 17:08:47 +1100
committerJohn Hodge <tpg@mutabah.net>2016-12-24 17:08:47 +1100
commit9c7978323aaf7b1c9f9840b7665f43b59f4de282 (patch)
tree295cb544b72b58abcf2eb4771f492fa748f2e2e1 /src/mir/from_hir_match.cpp
parent469d79c437e2be320bfe12a28c350a12bae1bc06 (diff)
downloadmrust-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.cpp3
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.