about summary refs log tree commit diff
diff options
context:
space:
mode:
authorCamille GILLOT <gillot.camille@gmail.com>2023-02-18 09:57:13 +0000
committerCamille GILLOT <gillot.camille@gmail.com>2023-02-18 09:57:13 +0000
commit7213eaa1c06bc75e6730fd5a7dea869dbdf4bed1 (patch)
treed42c2ce78dab2c64e414cf5e22cfed3dbab374c9
parent650683756f0ad9badfa08d2cd10e68c56dcef7a3 (diff)
downloadrust-7213eaa1c06bc75e6730fd5a7dea869dbdf4bed1.tar.gz
rust-7213eaa1c06bc75e6730fd5a7dea869dbdf4bed1.zip
Flood aggregate assignments with `Top`.
-rw-r--r--compiler/rustc_mir_transform/src/dataflow_const_prop.rs5
-rw-r--r--tests/mir-opt/dataflow-const-prop/enum.multiple.DataflowConstProp.diff3
2 files changed, 5 insertions, 3 deletions
diff --git a/compiler/rustc_mir_transform/src/dataflow_const_prop.rs b/compiler/rustc_mir_transform/src/dataflow_const_prop.rs
index f3ca2337e59..4dc1564ce3b 100644
--- a/compiler/rustc_mir_transform/src/dataflow_const_prop.rs
+++ b/compiler/rustc_mir_transform/src/dataflow_const_prop.rs
@@ -122,7 +122,10 @@ impl<'tcx> ValueAnalysis<'tcx> for ConstAnalysis<'_, 'tcx> {
     ) {
         match rvalue {
             Rvalue::Aggregate(kind, operands) => {
-                state.flood_with(target.as_ref(), self.map(), FlatSet::Bottom);
+                // If we assign `target = Enum::Variant#0(operand)`,
+                // we must make sure that all `target as Variant#i` are `Top`.
+                state.flood(target.as_ref(), self.map());
+
                 if let Some(target_idx) = self.map().find(target.as_ref()) {
                     let (variant_target, variant_index) = match **kind {
                         AggregateKind::Tuple | AggregateKind::Closure(..) => {
diff --git a/tests/mir-opt/dataflow-const-prop/enum.multiple.DataflowConstProp.diff b/tests/mir-opt/dataflow-const-prop/enum.multiple.DataflowConstProp.diff
index 5a1a608952c..c4002d65e5d 100644
--- a/tests/mir-opt/dataflow-const-prop/enum.multiple.DataflowConstProp.diff
+++ b/tests/mir-opt/dataflow-const-prop/enum.multiple.DataflowConstProp.diff
@@ -71,8 +71,7 @@
   
       bb7: {
           StorageLive(_9);                 // scope 2 at $DIR/enum.rs:+11:9: +11:10
--         _9 = _6;                         // scope 2 at $DIR/enum.rs:+11:13: +11:14
-+         _9 = const 0_u8;                 // scope 2 at $DIR/enum.rs:+11:13: +11:14
+          _9 = _6;                         // scope 2 at $DIR/enum.rs:+11:13: +11:14
           _0 = const ();                   // scope 0 at $DIR/enum.rs:+0:29: +12:2
           StorageDead(_9);                 // scope 2 at $DIR/enum.rs:+12:1: +12:2
           StorageDead(_6);                 // scope 1 at $DIR/enum.rs:+12:1: +12:2