about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorManish Goregaokar <manishsmail@gmail.com>2018-02-24 08:55:46 -0800
committerManish Goregaokar <manishsmail@gmail.com>2018-02-24 12:47:59 -0800
commit8fdad6f2efac23a8eeb7b8712ff57739157bcc4e (patch)
tree70858c01a7834e91f61b3208b4be5e758e26e640 /src
parent111af8f5c1ccf1c7a7ab402f5c5d04276602f3d4 (diff)
parentfe0260fbf892d5b49e79ee310b5e198c72c3d576 (diff)
downloadrust-8fdad6f2efac23a8eeb7b8712ff57739157bcc4e.tar.gz
rust-8fdad6f2efac23a8eeb7b8712ff57739157bcc4e.zip
Rollup merge of #48232 - fpoli:master, r=pnkfelix
mir: Gather move at SwitchInt, Assert terminators

Previously, `_1` was not marked as "definitely uninitialized" after a `switchInt(move _1)` terminator.

I think the same goes for the `assert` terminator.

Related discussion: https://internals.rust-lang.org/t/why-is-2-definitely-initialized-after-switchint-move-2/6760
Diffstat (limited to 'src')
-rw-r--r--src/librustc_mir/dataflow/move_paths/builder.rs9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/librustc_mir/dataflow/move_paths/builder.rs b/src/librustc_mir/dataflow/move_paths/builder.rs
index 635d99e7737..d6f419f6cfb 100644
--- a/src/librustc_mir/dataflow/move_paths/builder.rs
+++ b/src/librustc_mir/dataflow/move_paths/builder.rs
@@ -353,9 +353,12 @@ impl<'b, 'a, 'gcx, 'tcx> Gatherer<'b, 'a, 'gcx, 'tcx> {
                 self.gather_move(&Place::Local(RETURN_PLACE));
             }
 
-            TerminatorKind::Assert { .. } |
-            TerminatorKind::SwitchInt { .. } => {
-                // branching terminators - these don't move anything
+            TerminatorKind::Assert { ref cond, .. } => {
+                self.gather_operand(cond);
+            }
+
+            TerminatorKind::SwitchInt { ref discr, .. } => {
+                self.gather_operand(discr);
             }
 
             TerminatorKind::Yield { ref value, .. } => {