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 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() -> 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() -> 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() -> 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 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

