diff --git a/src/librustc_mir/transform/deaggregator.rs b/src/librustc_mir/transform/deaggregator.rs
index ae91123..fccd4a6 100644
--- a/src/librustc_mir/transform/deaggregator.rs
+++ b/src/librustc_mir/transform/deaggregator.rs
@@ -34,6 +34,8 @@
 
         // Do not trigger on constants.  Could be revised in future
         if let MirSource::Fn(_) = source {} else { return; }
+        // In fact, we might not want to trigger in other cases.
+        // Ex: when we could use SROA.  See issue #35259
 
         let mut curr: usize = 0;
         for bb in mir.basic_blocks_mut() {
@@ -90,21 +92,24 @@
     for i in curr..statements.len() {
         let ref statement = statements[i];
         let StatementKind::Assign(_, ref rhs) = statement.kind;
-        if let &Rvalue::Aggregate(ref kind, ref operands) = rhs {
-            if let &AggregateKind::Adt(adt_def, variant, _) = kind {
-                if operands.len() > 0 { // don't deaggregate ()
-                    if adt_def.variants.len() > 1 {
-                        // only deaggrate structs for now
-                        continue;
-                    }
-                    debug!("getting variant {:?}", variant);
-                    debug!("for adt_def {:?}", adt_def);
-                    let variant_def = &adt_def.variants[variant];
-                    if variant_def.kind == VariantKind::Struct {
-                        return Some(i);
-                    }
-                }
-            }
+        let (kind, operands) = match rhs {
+            &Rvalue::Aggregate(ref kind, ref operands) => (kind, operands),
+            _ => continue,
+        };
+        let (adt_def, variant) = match kind {
+            &AggregateKind::Adt(adt_def, variant, _) => (adt_def, variant),
+            _ => continue,
+        };
+        if operands.len() == 0 || adt_def.variants.len() > 1 {
+            // don't deaggregate ()
+            // don't deaggregate enums ... for now
+            continue;
+        }
+        debug!("getting variant {:?}", variant);
+        debug!("for adt_def {:?}", adt_def);
+        let variant_def = &adt_def.variants[variant];
+        if variant_def.kind == VariantKind::Struct {
+            return Some(i);
         }
     };
     None
