error: malformed `rustc_on_unimplemented` attribute input
  --> $DIR/bad-annotation.rs:17:1
   |
LL | #[rustc_on_unimplemented]
   | ^^^^^^^^^^^^^^^^^^^^^^^^^
   |
help: the following are the possible correct uses
   |
LL | #[rustc_on_unimplemented = "message"]
   |
LL | #[rustc_on_unimplemented(/*opt*/ message = "...", /*opt*/ label = "...", /*opt*/ note = "...")]
   |

error[E0230]: there is no parameter `C` on trait `BadAnnotation2`
  --> $DIR/bad-annotation.rs:22:1
   |
LL | #[rustc_on_unimplemented = "Unimplemented trait error on `{Self}` with params `<{A},{B},{C}>`"]
   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

error[E0231]: only named substitution parameters are allowed
  --> $DIR/bad-annotation.rs:27:1
   |
LL | #[rustc_on_unimplemented = "Unimplemented trait error on `{Self}` with params `<{A},{B},{}>`"]
   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

error[E0232]: this attribute must have a valid value
  --> $DIR/bad-annotation.rs:32:26
   |
LL | #[rustc_on_unimplemented(lorem="")]
   |                          ^^^^^^^^ expected value here
   |
   = note: eg `#[rustc_on_unimplemented(message="foo")]`

error[E0232]: this attribute must have a valid value
  --> $DIR/bad-annotation.rs:36:26
   |
LL | #[rustc_on_unimplemented(lorem(ipsum(dolor)))]
   |                          ^^^^^^^^^^^^^^^^^^^ expected value here
   |
   = note: eg `#[rustc_on_unimplemented(message="foo")]`

error[E0232]: this attribute must have a valid value
  --> $DIR/bad-annotation.rs:40:39
   |
LL | #[rustc_on_unimplemented(message="x", message="y")]
   |                                       ^^^^^^^^^^^ expected value here
   |
   = note: eg `#[rustc_on_unimplemented(message="foo")]`

error[E0232]: this attribute must have a valid value
  --> $DIR/bad-annotation.rs:44:39
   |
LL | #[rustc_on_unimplemented(message="x", on(desugared, message="y"))]
   |                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^ expected value here
   |
   = note: eg `#[rustc_on_unimplemented(message="foo")]`

error[E0232]: empty `on`-clause in `#[rustc_on_unimplemented]`
  --> $DIR/bad-annotation.rs:48:26
   |
LL | #[rustc_on_unimplemented(on(), message="y")]
   |                          ^^^^ empty on-clause here

error[E0232]: this attribute must have a valid value
  --> $DIR/bad-annotation.rs:52:26
   |
LL | #[rustc_on_unimplemented(on="x", message="y")]
   |                          ^^^^^^ expected value here
   |
   = note: eg `#[rustc_on_unimplemented(message="foo")]`

error[E0232]: this attribute must have a valid value
  --> $DIR/bad-annotation.rs:59:40
   |
LL | #[rustc_on_unimplemented(on(desugared, on(desugared, message="x")), message="y")]
   |                                        ^^^^^^^^^^^^^^^^^^^^^^^^^^ expected value here
   |
   = note: eg `#[rustc_on_unimplemented(message="foo")]`

error: aborting due to 10 previous errors

Some errors have detailed explanations: E0230, E0231, E0232.
For more information about an error, try `rustc --explain E0230`.