about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorJohn Kåre Alsaker <john.kare.alsaker@gmail.com>2017-08-11 04:24:25 +0200
committerJohn Kåre Alsaker <john.kare.alsaker@gmail.com>2017-08-11 04:24:25 +0200
commit2d30e7e982bb1f2e60bc8ed449489c021416c845 (patch)
tree46ef2510a525188637ce63418f1a2e276d0824f4 /src
parentb8aa595e6d159bfb5e0293659b69e0edc457a468 (diff)
downloadrust-2d30e7e982bb1f2e60bc8ed449489c021416c845.tar.gz
rust-2d30e7e982bb1f2e60bc8ed449489c021416c845.zip
Fix merge of scope.rs
Diffstat (limited to 'src')
-rw-r--r--src/librustc_mir/build/scope.rs19
1 files changed, 11 insertions, 8 deletions
diff --git a/src/librustc_mir/build/scope.rs b/src/librustc_mir/build/scope.rs
index 2033131c065..cb7b13f1e61 100644
--- a/src/librustc_mir/build/scope.rs
+++ b/src/librustc_mir/build/scope.rs
@@ -875,15 +875,13 @@ fn build_scope_drops<'tcx>(cfg: &mut CFG<'tcx>,
                 // for us to diverge into in case the drop panics.
                 let on_diverge = iter.peek().iter().filter_map(|dd| {
                     match dd.kind {
-                        DropKind::Value {
-                            cached_block: CachedBlock {
-                                unwind: None,
-                                generator_drop: None,
+                        DropKind::Value { cached_block } => {
+                            let result = cached_block.get(generator_drop);
+                            if result.is_none() {
+                                span_bug!(drop_data.span, "cached block not present?")
                             }
-                        } => {
-                            span_bug!(drop_data.span, "cached block not present?")
-                        }
-                        DropKind::Value { cached_block } => cached_block.get(generator_drop),
+                            result
+                        },
                         DropKind::Storage => None
                     }
                 }).next();
@@ -903,6 +901,11 @@ fn build_scope_drops<'tcx>(cfg: &mut CFG<'tcx>,
             DropKind::Storage => {}
         }
 
+        // We do not need to emit StorageDead for generator drops
+        if generator_drop {
+            continue
+        }
+
         // Drop the storage for both value and storage drops.
         // Only temps and vars need their storage dead.
         match drop_data.location {