- // MIR for `bound` before LowerSliceLenCalls
+ // MIR for `bound` after LowerSliceLenCalls
  
  fn bound(_1: usize, _2: &[u8]) -> u8 {
      debug index => _1;
      debug slice => _2;
      let mut _0: u8;
      let mut _3: bool;
      let mut _4: usize;
      let mut _5: usize;
      let mut _6: &[u8];
      let _7: usize;
      let mut _8: usize;
      let mut _9: bool;
  
      bb0: {
          StorageLive(_3);
          StorageLive(_4);
          _4 = copy _1;
          StorageLive(_5);
          StorageLive(_6);
          _6 = &(*_2);
-         _5 = core::slice::<impl [u8]>::len(move _6) -> [return: bb1, unwind continue];
+         _5 = PtrMetadata(move _6);
+         goto -> bb1;
      }
  
      bb1: {
          StorageDead(_6);
          _3 = Lt(move _4, move _5);
          switchInt(move _3) -> [0: bb4, otherwise: bb2];
      }
  
      bb2: {
          StorageDead(_5);
          StorageDead(_4);
          StorageLive(_7);
          _7 = copy _1;
          _8 = Len((*_2));
          _9 = Lt(copy _7, copy _8);
          assert(move _9, "index out of bounds: the length is {} but the index is {}", move _8, copy _7) -> [success: bb3, unwind continue];
      }
  
      bb3: {
          _0 = copy (*_2)[_7];
          StorageDead(_7);
          goto -> bb5;
      }
  
      bb4: {
          StorageDead(_5);
          StorageDead(_4);
          _0 = const 42_u8;
          goto -> bb5;
      }
  
      bb5: {
          StorageDead(_3);
          return;
      }
  }
  
