- // MIR for `main` before InstrumentCoverage
+ // MIR for `main` after InstrumentCoverage
  
  fn main() -> () {
      let mut _0: ();
      let mut _1: ();
      let mut _2: bool;
      let mut _3: !;
  
+     coverage Code { bcb: bcb0 } => $DIR/instrument_coverage.rs:13:1: 13:11 (#0);
+     coverage Code { bcb: bcb1 } => $DIR/instrument_coverage.rs:15:12: 15:15 (#0);
+     coverage Code { bcb: bcb2 } => $DIR/instrument_coverage.rs:16:13: 16:18 (#0);
+     coverage Code { bcb: bcb3 } => $DIR/instrument_coverage.rs:17:10: 17:10 (#0);
+     coverage Code { bcb: bcb2 } => $DIR/instrument_coverage.rs:19:2: 19:2 (#0);
+ 
      bb0: {
+         Coverage::VirtualCounter(bcb0);
          goto -> bb1;
      }
  
      bb1: {
+         Coverage::VirtualCounter(bcb1);
          falseUnwind -> [real: bb2, unwind: bb6];
      }
  
      bb2: {
          StorageLive(_2);
          _2 = bar() -> [return: bb3, unwind: bb6];
      }
  
      bb3: {
          switchInt(move _2) -> [0: bb5, otherwise: bb4];
      }
  
      bb4: {
+         Coverage::VirtualCounter(bcb2);
          _0 = const ();
          StorageDead(_2);
          return;
      }
  
      bb5: {
+         Coverage::VirtualCounter(bcb3);
          _1 = const ();
          StorageDead(_2);
          goto -> bb1;
      }
  
      bb6 (cleanup): {
          resume;
      }
  }
  
