- // MIR for `constant` before DataflowConstProp
+ // MIR for `constant` after DataflowConstProp
  
  fn constant() -> () {
      let mut _0: ();
      let _1: E;
      let mut _3: isize;
      scope 1 {
          debug e => _1;
          let _2: i32;
          let _4: i32;
          let _5: i32;
          scope 2 {
              debug x => _2;
          }
          scope 3 {
              debug x1 => _4;
          }
          scope 4 {
              debug x2 => _5;
          }
      }
  
      bb0: {
          StorageLive(_1);
          _1 = const constant::C;
          StorageLive(_2);
-         _3 = discriminant(_1);
-         switchInt(move _3) -> [0: bb3, 1: bb2, otherwise: bb1];
+         _3 = const 0_isize;
+         switchInt(const 0_isize) -> [0: bb3, 1: bb2, otherwise: bb1];
      }
  
      bb1: {
          unreachable;
      }
  
      bb2: {
          StorageLive(_5);
          _5 = copy ((_1 as V2).0: i32);
          _2 = copy _5;
          StorageDead(_5);
          goto -> bb4;
      }
  
      bb3: {
          StorageLive(_4);
-         _4 = copy ((_1 as V1).0: i32);
-         _2 = copy _4;
+         _4 = const 0_i32;
+         _2 = const 0_i32;
          StorageDead(_4);
          goto -> bb4;
      }
  
      bb4: {
          _0 = const ();
          StorageDead(_2);
          StorageDead(_1);
          return;
      }
  }
  
