error[E0478]: lifetime bound not satisfied
  --> $DIR/regions-trait-object-subtyping.rs:15:5
   |
LL |     x
   |     ^
   |
note: lifetime parameter instantiated with the lifetime `'a` as defined on the function body at 13:9
  --> $DIR/regions-trait-object-subtyping.rs:13:9
   |
LL | fn foo3<'a,'b>(x: &'a mut dyn Dummy) -> &'b mut dyn Dummy {
   |         ^^
note: but lifetime parameter must outlive the lifetime `'b` as defined on the function body at 13:12
  --> $DIR/regions-trait-object-subtyping.rs:13:12
   |
LL | fn foo3<'a,'b>(x: &'a mut dyn Dummy) -> &'b mut dyn Dummy {
   |            ^^

error[E0495]: cannot infer an appropriate lifetime for automatic coercion due to conflicting requirements
  --> $DIR/regions-trait-object-subtyping.rs:15:5
   |
LL |     x
   |     ^
   |
note: first, the lifetime cannot outlive the lifetime `'a` as defined on the function body at 13:9...
  --> $DIR/regions-trait-object-subtyping.rs:13:9
   |
LL | fn foo3<'a,'b>(x: &'a mut dyn Dummy) -> &'b mut dyn Dummy {
   |         ^^
note: ...so that reference does not outlive borrowed content
  --> $DIR/regions-trait-object-subtyping.rs:15:5
   |
LL |     x
   |     ^
note: but, the lifetime must be valid for the lifetime `'b` as defined on the function body at 13:12...
  --> $DIR/regions-trait-object-subtyping.rs:13:12
   |
LL | fn foo3<'a,'b>(x: &'a mut dyn Dummy) -> &'b mut dyn Dummy {
   |            ^^
note: ...so that the expression is assignable
  --> $DIR/regions-trait-object-subtyping.rs:15:5
   |
LL |     x
   |     ^
   = note: expected `&'b mut (dyn Dummy + 'b)`
              found `&mut (dyn Dummy + 'b)`

error[E0308]: mismatched types
  --> $DIR/regions-trait-object-subtyping.rs:22:5
   |
LL |     x
   |     ^ lifetime mismatch
   |
   = note: expected struct `Wrapper<&'b mut (dyn Dummy + 'b)>`
              found struct `Wrapper<&'a mut (dyn Dummy + 'a)>`
note: the lifetime `'b` as defined on the function body at 20:15...
  --> $DIR/regions-trait-object-subtyping.rs:20:15
   |
LL | fn foo4<'a:'b,'b>(x: Wrapper<&'a mut dyn Dummy>) -> Wrapper<&'b mut dyn Dummy> {
   |               ^^
note: ...does not necessarily outlive the lifetime `'a` as defined on the function body at 20:9
  --> $DIR/regions-trait-object-subtyping.rs:20:9
   |
LL | fn foo4<'a:'b,'b>(x: Wrapper<&'a mut dyn Dummy>) -> Wrapper<&'b mut dyn Dummy> {
   |         ^^

error: aborting due to 3 previous errors

Some errors have detailed explanations: E0308, E0478, E0495.
For more information about an error, try `rustc --explain E0308`.
