- // MIR for `main` before InstrumentCoverage
+ // MIR for `main` after InstrumentCoverage
  
  fn main() -> () {
      let mut _0: ();
      let mut _1: bool;
  
      coverage branch { true: BlockMarkerId(0), false: BlockMarkerId(1) } => $DIR/instrument_coverage_cleanup.rs:14:8: 14:36 (#0)
  
+     coverage Code { bcb: bcb0 } => $DIR/instrument_coverage_cleanup.rs:13:1: 13:10 (#0);
+     coverage Code { bcb: bcb0 } => $DIR/instrument_coverage_cleanup.rs:14:8: 14:36 (#0);
+     coverage Code { bcb: bcb3 } => $DIR/instrument_coverage_cleanup.rs:14:37: 14:39 (#0);
+     coverage Code { bcb: bcb1 } => $DIR/instrument_coverage_cleanup.rs:14:38: 14:39 (#0);
+     coverage Code { bcb: bcb2 } => $DIR/instrument_coverage_cleanup.rs:15:1: 15:2 (#0);
+     coverage Branch { true_bcb: bcb3, false_bcb: bcb1 } => $DIR/instrument_coverage_cleanup.rs:14:8: 14:36 (#0);
+ 
      bb0: {
+         Coverage::VirtualCounter(bcb0);
          Coverage::SpanMarker;
          StorageLive(_1);
          _1 = std::hint::black_box::<bool>(const true) -> [return: bb1, unwind: bb5];
      }
  
      bb1: {
          switchInt(move _1) -> [0: bb3, otherwise: bb2];
      }
  
      bb2: {
+         Coverage::VirtualCounter(bcb1);
          Coverage::BlockMarker(1);
          _0 = const ();
          goto -> bb4;
      }
  
      bb3: {
+         Coverage::VirtualCounter(bcb3);
          Coverage::BlockMarker(0);
          _0 = const ();
          goto -> bb4;
      }
  
      bb4: {
+         Coverage::VirtualCounter(bcb2);
          StorageDead(_1);
          return;
      }
  
      bb5 (cleanup): {
          resume;
      }
  }
  
