- // MIR for `foo` before Inline
+ // MIR for `foo` after Inline
  
  fn foo() -> () {
      let mut _0: ();                      // return place in scope 0 at $DIR/caller_with_trivial_bound.rs:+1:1: +1:1
      let mut _1: <IntFactory as Factory<T>>::Item; // in scope 0 at $DIR/caller_with_trivial_bound.rs:+4:9: +4:14
      scope 1 {
          debug x => _1;                   // in scope 1 at $DIR/caller_with_trivial_bound.rs:+4:9: +4:14
      }
  
      bb0: {
          StorageLive(_1);                 // scope 0 at $DIR/caller_with_trivial_bound.rs:+4:9: +4:14
          _1 = bar::<T>() -> bb1;          // scope 0 at $DIR/caller_with_trivial_bound.rs:+4:51: +4:61
                                           // mir::Constant
                                           // + span: $DIR/caller_with_trivial_bound.rs:20:51: 20:59
                                           // + literal: Const { ty: fn() -> <IntFactory as Factory<T>>::Item {bar::<T>}, val: Value(<ZST>) }
      }
  
      bb1: {
          _0 = const ();                   // scope 0 at $DIR/caller_with_trivial_bound.rs:+3:1: +5:2
          drop(_1) -> [return: bb2, unwind: bb3]; // scope 0 at $DIR/caller_with_trivial_bound.rs:+5:1: +5:2
      }
  
      bb2: {
          StorageDead(_1);                 // scope 0 at $DIR/caller_with_trivial_bound.rs:+5:1: +5:2
          return;                          // scope 0 at $DIR/caller_with_trivial_bound.rs:+5:2: +5:2
      }
  
      bb3 (cleanup): {
          resume;                          // scope 0 at $DIR/caller_with_trivial_bound.rs:+0:1: +5:2
      }
  }
  
