error: impl trait in impl method signature does not match trait method signature
  --> $DIR/refine.rs:9:22
   |
LL |     fn bar() -> impl Sized;
   |                 ---------- return type from trait method defined here
...
LL |     fn bar() -> impl Copy {}
   |                      ^^^^ this bound is stronger than that defined on the trait
   |
   = note: add `#[allow(refining_impl_trait)]` if it is intended for this to be part of the public API of this crate
   = note: we are soliciting feedback, see issue #121718 <https://github.com/rust-lang/rust/issues/121718> for more information
note: the lint level is defined here
  --> $DIR/refine.rs:1:9
   |
LL | #![deny(refining_impl_trait)]
   |         ^^^^^^^^^^^^^^^^^^^
   = note: `#[deny(refining_impl_trait_reachable)]` implied by `#[deny(refining_impl_trait)]`
help: replace the return type so that it matches the trait
   |
LL -     fn bar() -> impl Copy {}
LL +     fn bar() -> impl Sized {}
   |

error: impl trait in impl method signature does not match trait method signature
  --> $DIR/refine.rs:15:5
   |
LL |     fn bar() -> impl Sized;
   |                 ---------- return type from trait method defined here
...
LL |     fn bar() {}
   |     ^^^^^^^^
   |
   = note: add `#[allow(refining_impl_trait)]` if it is intended for this to be part of the public API of this crate
   = note: we are soliciting feedback, see issue #121718 <https://github.com/rust-lang/rust/issues/121718> for more information
help: replace the return type so that it matches the trait
   |
LL |     fn bar()-> impl Sized  {}
   |             +++++++++++++

error: impl trait in impl method signature does not match trait method signature
  --> $DIR/refine.rs:21:17
   |
LL |     fn bar() -> impl Sized;
   |                 ---------- return type from trait method defined here
...
LL |     fn bar() -> () {}
   |                 ^^
   |
   = note: add `#[allow(refining_impl_trait)]` if it is intended for this to be part of the public API of this crate
   = note: we are soliciting feedback, see issue #121718 <https://github.com/rust-lang/rust/issues/121718> for more information
help: replace the return type so that it matches the trait
   |
LL -     fn bar() -> () {}
LL +     fn bar() -> impl Sized {}
   |

error: impl trait in impl method signature does not match trait method signature
  --> $DIR/refine.rs:27:17
   |
LL |     fn bar() -> impl Sized;
   |                 ---------- return type from trait method defined here
...
LL |     fn bar() -> () {}
   |                 ^^
   |
   = note: add `#[allow(refining_impl_trait)]` if it is intended for this to be part of the public API of this crate
   = note: we are soliciting feedback, see issue #121718 <https://github.com/rust-lang/rust/issues/121718> for more information
   = note: `#[deny(refining_impl_trait_internal)]` implied by `#[deny(refining_impl_trait)]`
help: replace the return type so that it matches the trait
   |
LL -     fn bar() -> () {}
LL +     fn bar() -> impl Sized {}
   |

error: impl trait in impl method signature does not match trait method signature
  --> $DIR/refine.rs:35:17
   |
LL |     fn bar() -> impl Sized;
   |                 ---------- return type from trait method defined here
...
LL |     fn bar() -> () {}
   |                 ^^
   |
   = note: add `#[allow(refining_impl_trait)]` if it is intended for this to be part of the public API of this crate
   = note: we are soliciting feedback, see issue #121718 <https://github.com/rust-lang/rust/issues/121718> for more information
help: replace the return type so that it matches the trait
   |
LL -     fn bar() -> () {}
LL +     fn bar() -> impl Sized {}
   |

error: impl trait in impl method signature does not match trait method signature
  --> $DIR/refine.rs:45:27
   |
LL |     fn bar<'a>(&'a self) -> impl Sized + 'a;
   |                             --------------- return type from trait method defined here
...
LL |     fn bar(&self) -> impl Copy + '_ {}
   |                           ^^^^ this bound is stronger than that defined on the trait
   |
   = note: add `#[allow(refining_impl_trait)]` if it is intended for this to be part of the public API of this crate
   = note: we are soliciting feedback, see issue #121718 <https://github.com/rust-lang/rust/issues/121718> for more information
help: replace the return type so that it matches the trait
   |
LL -     fn bar(&self) -> impl Copy + '_ {}
LL +     fn bar(&self) -> impl Sized + '_ {}
   |

error: impl trait in impl method signature does not match trait method signature
  --> $DIR/refine.rs:56:9
   |
LL |         fn bar() -> impl Sized;
   |                     ---------- return type from trait method defined here
...
LL |         fn bar() {}
   |         ^^^^^^^^
   |
   = note: add `#[allow(refining_impl_trait)]` if it is intended for this to be part of the public API of this crate
   = note: we are soliciting feedback, see issue #121718 <https://github.com/rust-lang/rust/issues/121718> for more information
help: replace the return type so that it matches the trait
   |
LL |         fn bar()-> impl Sized  {}
   |                 +++++++++++++

error: aborting due to 7 previous errors

