- // MIR for `change_loop_body` before ConstProp
+ // MIR for `change_loop_body` after ConstProp
  
  fn change_loop_body() -> () {
      let mut _0: ();                      // return place in scope 0 at $DIR/while_let_loops.rs:+0:27: +0:27
      let mut _1: i32;                     // in scope 0 at $DIR/while_let_loops.rs:+1:9: +1:15
      let mut _2: std::option::Option<u32>; // in scope 0 at $DIR/while_let_loops.rs:+2:28: +2:32
      let mut _3: isize;                   // in scope 0 at $DIR/while_let_loops.rs:+2:15: +2:25
      scope 1 {
          debug _x => _1;                  // in scope 1 at $DIR/while_let_loops.rs:+1:9: +1:15
          scope 2 {
          }
      }
  
      bb0: {
          StorageLive(_1);                 // scope 0 at $DIR/while_let_loops.rs:+1:9: +1:15
          _1 = const 0_i32;                // scope 0 at $DIR/while_let_loops.rs:+1:18: +1:19
          StorageLive(_2);                 // scope 2 at $DIR/while_let_loops.rs:+2:28: +2:32
          Deinit(_2);                      // scope 2 at $DIR/while_let_loops.rs:+2:28: +2:32
          discriminant(_2) = 0;            // scope 2 at $DIR/while_let_loops.rs:+2:28: +2:32
-         _3 = discriminant(_2);           // scope 2 at $DIR/while_let_loops.rs:+2:15: +2:25
-         switchInt(move _3) -> [1: bb1, otherwise: bb3]; // scope 2 at $DIR/while_let_loops.rs:+2:15: +2:25
+         _3 = const 0_isize;              // scope 2 at $DIR/while_let_loops.rs:+2:15: +2:25
+         switchInt(const 0_isize) -> [1: bb1, otherwise: bb3]; // scope 2 at $DIR/while_let_loops.rs:+2:15: +2:25
      }
  
      bb1: {
          switchInt(((_2 as Some).0: u32)) -> [0: bb2, otherwise: bb3]; // scope 2 at $DIR/while_let_loops.rs:+2:15: +2:25
      }
  
      bb2: {
          _1 = const 1_i32;                // scope 2 at $DIR/while_let_loops.rs:+3:9: +3:15
          goto -> bb4;                     // scope 2 at $DIR/while_let_loops.rs:+4:9: +4:14
      }
  
      bb3: {
          goto -> bb4;                     // scope 1 at no-location
      }
  
      bb4: {
          StorageDead(_2);                 // scope 1 at $DIR/while_let_loops.rs:+5:5: +5:6
          StorageDead(_1);                 // scope 0 at $DIR/while_let_loops.rs:+6:1: +6:2
          return;                          // scope 0 at $DIR/while_let_loops.rs:+6:2: +6:2
      }
  }
  
