1
Fork 0

Rollup merge of #133187 - ehuss:reference-diagnostic, r=jieyouxu

Add reference annotations for diagnostic attributes

This adds reference annotations for `diagnostic::on_unimplmented` and the `diagnostic` namespace in general.

There's also a rename for a test that looks like it was put in the wrong location.
This commit is contained in:
León Orell Valerian Liehr 2024-11-19 04:01:32 +01:00 committed by GitHub
commit 739fdaf969
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
28 changed files with 170 additions and 147 deletions

View file

@ -1,3 +1,5 @@
//@ reference: attributes.diagnostic.namespace.unknown-invalid-syntax
#![deny(unknown_or_malformed_diagnostic_attributes)] #![deny(unknown_or_malformed_diagnostic_attributes)]
#[diagnostic::unknown_attribute] #[diagnostic::unknown_attribute]

View file

@ -1,11 +1,11 @@
error: unknown diagnostic attribute error: unknown diagnostic attribute
--> $DIR/deny_malformed_attribute.rs:3:15 --> $DIR/deny_malformed_attribute.rs:5:15
| |
LL | #[diagnostic::unknown_attribute] LL | #[diagnostic::unknown_attribute]
| ^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^
| |
note: the lint level is defined here note: the lint level is defined here
--> $DIR/deny_malformed_attribute.rs:1:9 --> $DIR/deny_malformed_attribute.rs:3:9
| |
LL | #![deny(unknown_or_malformed_diagnostic_attributes)] LL | #![deny(unknown_or_malformed_diagnostic_attributes)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

View file

@ -1,5 +1,6 @@
//@ edition:2021 //@ edition:2021
//@ aux-build:bad_on_unimplemented.rs //@ aux-build:bad_on_unimplemented.rs
//@ reference: attributes.diagnostic.on_unimplemented.syntax
// Do not ICE when encountering a malformed `#[diagnostic::on_unimplemented]` annotation in a // Do not ICE when encountering a malformed `#[diagnostic::on_unimplemented]` annotation in a
// dependency when incorrectly used (#124651). // dependency when incorrectly used (#124651).

View file

@ -1,5 +1,5 @@
error[E0277]: the trait bound `(): bad_on_unimplemented::MissingAttr` is not satisfied error[E0277]: the trait bound `(): bad_on_unimplemented::MissingAttr` is not satisfied
--> $DIR/malformed_foreign_on_unimplemented.rs:22:18 --> $DIR/malformed_foreign_on_unimplemented.rs:23:18
| |
LL | missing_attr(()); LL | missing_attr(());
| ------------ ^^ the trait `bad_on_unimplemented::MissingAttr` is not implemented for `()` | ------------ ^^ the trait `bad_on_unimplemented::MissingAttr` is not implemented for `()`
@ -7,13 +7,13 @@ LL | missing_attr(());
| required by a bound introduced by this call | required by a bound introduced by this call
| |
note: required by a bound in `missing_attr` note: required by a bound in `missing_attr`
--> $DIR/malformed_foreign_on_unimplemented.rs:11:20 --> $DIR/malformed_foreign_on_unimplemented.rs:12:20
| |
LL | fn missing_attr<T: MissingAttr>(_: T) {} LL | fn missing_attr<T: MissingAttr>(_: T) {}
| ^^^^^^^^^^^ required by this bound in `missing_attr` | ^^^^^^^^^^^ required by this bound in `missing_attr`
error[E0277]: the trait bound `(): bad_on_unimplemented::DuplicateAttr` is not satisfied error[E0277]: the trait bound `(): bad_on_unimplemented::DuplicateAttr` is not satisfied
--> $DIR/malformed_foreign_on_unimplemented.rs:23:20 --> $DIR/malformed_foreign_on_unimplemented.rs:24:20
| |
LL | duplicate_attr(()); LL | duplicate_attr(());
| -------------- ^^ a | -------------- ^^ a
@ -22,13 +22,13 @@ LL | duplicate_attr(());
| |
= help: the trait `bad_on_unimplemented::DuplicateAttr` is not implemented for `()` = help: the trait `bad_on_unimplemented::DuplicateAttr` is not implemented for `()`
note: required by a bound in `duplicate_attr` note: required by a bound in `duplicate_attr`
--> $DIR/malformed_foreign_on_unimplemented.rs:12:22 --> $DIR/malformed_foreign_on_unimplemented.rs:13:22
| |
LL | fn duplicate_attr<T: DuplicateAttr>(_: T) {} LL | fn duplicate_attr<T: DuplicateAttr>(_: T) {}
| ^^^^^^^^^^^^^ required by this bound in `duplicate_attr` | ^^^^^^^^^^^^^ required by this bound in `duplicate_attr`
error[E0277]: the trait bound `(): bad_on_unimplemented::NotMetaList` is not satisfied error[E0277]: the trait bound `(): bad_on_unimplemented::NotMetaList` is not satisfied
--> $DIR/malformed_foreign_on_unimplemented.rs:24:19 --> $DIR/malformed_foreign_on_unimplemented.rs:25:19
| |
LL | not_meta_list(()); LL | not_meta_list(());
| ------------- ^^ the trait `bad_on_unimplemented::NotMetaList` is not implemented for `()` | ------------- ^^ the trait `bad_on_unimplemented::NotMetaList` is not implemented for `()`
@ -36,13 +36,13 @@ LL | not_meta_list(());
| required by a bound introduced by this call | required by a bound introduced by this call
| |
note: required by a bound in `not_meta_list` note: required by a bound in `not_meta_list`
--> $DIR/malformed_foreign_on_unimplemented.rs:13:21 --> $DIR/malformed_foreign_on_unimplemented.rs:14:21
| |
LL | fn not_meta_list<T: NotMetaList>(_: T) {} LL | fn not_meta_list<T: NotMetaList>(_: T) {}
| ^^^^^^^^^^^ required by this bound in `not_meta_list` | ^^^^^^^^^^^ required by this bound in `not_meta_list`
error[E0277]: the trait bound `(): bad_on_unimplemented::Empty` is not satisfied error[E0277]: the trait bound `(): bad_on_unimplemented::Empty` is not satisfied
--> $DIR/malformed_foreign_on_unimplemented.rs:25:11 --> $DIR/malformed_foreign_on_unimplemented.rs:26:11
| |
LL | empty(()); LL | empty(());
| ----- ^^ the trait `bad_on_unimplemented::Empty` is not implemented for `()` | ----- ^^ the trait `bad_on_unimplemented::Empty` is not implemented for `()`
@ -50,13 +50,13 @@ LL | empty(());
| required by a bound introduced by this call | required by a bound introduced by this call
| |
note: required by a bound in `empty` note: required by a bound in `empty`
--> $DIR/malformed_foreign_on_unimplemented.rs:14:13 --> $DIR/malformed_foreign_on_unimplemented.rs:15:13
| |
LL | fn empty<T: Empty>(_: T) {} LL | fn empty<T: Empty>(_: T) {}
| ^^^^^ required by this bound in `empty` | ^^^^^ required by this bound in `empty`
error[E0277]: the trait bound `(): bad_on_unimplemented::WrongDelim` is not satisfied error[E0277]: the trait bound `(): bad_on_unimplemented::WrongDelim` is not satisfied
--> $DIR/malformed_foreign_on_unimplemented.rs:26:17 --> $DIR/malformed_foreign_on_unimplemented.rs:27:17
| |
LL | wrong_delim(()); LL | wrong_delim(());
| ----------- ^^ the trait `bad_on_unimplemented::WrongDelim` is not implemented for `()` | ----------- ^^ the trait `bad_on_unimplemented::WrongDelim` is not implemented for `()`
@ -64,13 +64,13 @@ LL | wrong_delim(());
| required by a bound introduced by this call | required by a bound introduced by this call
| |
note: required by a bound in `wrong_delim` note: required by a bound in `wrong_delim`
--> $DIR/malformed_foreign_on_unimplemented.rs:15:19 --> $DIR/malformed_foreign_on_unimplemented.rs:16:19
| |
LL | fn wrong_delim<T: WrongDelim>(_: T) {} LL | fn wrong_delim<T: WrongDelim>(_: T) {}
| ^^^^^^^^^^ required by this bound in `wrong_delim` | ^^^^^^^^^^ required by this bound in `wrong_delim`
error[E0277]: the trait bound `(): bad_on_unimplemented::BadFormatter<()>` is not satisfied error[E0277]: the trait bound `(): bad_on_unimplemented::BadFormatter<()>` is not satisfied
--> $DIR/malformed_foreign_on_unimplemented.rs:27:19 --> $DIR/malformed_foreign_on_unimplemented.rs:28:19
| |
LL | bad_formatter(()); LL | bad_formatter(());
| ------------- ^^ () | ------------- ^^ ()
@ -79,13 +79,13 @@ LL | bad_formatter(());
| |
= help: the trait `bad_on_unimplemented::BadFormatter<()>` is not implemented for `()` = help: the trait `bad_on_unimplemented::BadFormatter<()>` is not implemented for `()`
note: required by a bound in `bad_formatter` note: required by a bound in `bad_formatter`
--> $DIR/malformed_foreign_on_unimplemented.rs:16:21 --> $DIR/malformed_foreign_on_unimplemented.rs:17:21
| |
LL | fn bad_formatter<T: BadFormatter<()>>(_: T) {} LL | fn bad_formatter<T: BadFormatter<()>>(_: T) {}
| ^^^^^^^^^^^^^^^^ required by this bound in `bad_formatter` | ^^^^^^^^^^^^^^^^ required by this bound in `bad_formatter`
error[E0277]: the trait bound `(): bad_on_unimplemented::NoImplicitArgs` is not satisfied error[E0277]: the trait bound `(): bad_on_unimplemented::NoImplicitArgs` is not satisfied
--> $DIR/malformed_foreign_on_unimplemented.rs:28:22 --> $DIR/malformed_foreign_on_unimplemented.rs:29:22
| |
LL | no_implicit_args(()); LL | no_implicit_args(());
| ---------------- ^^ test {} | ---------------- ^^ test {}
@ -94,13 +94,13 @@ LL | no_implicit_args(());
| |
= help: the trait `bad_on_unimplemented::NoImplicitArgs` is not implemented for `()` = help: the trait `bad_on_unimplemented::NoImplicitArgs` is not implemented for `()`
note: required by a bound in `no_implicit_args` note: required by a bound in `no_implicit_args`
--> $DIR/malformed_foreign_on_unimplemented.rs:17:24 --> $DIR/malformed_foreign_on_unimplemented.rs:18:24
| |
LL | fn no_implicit_args<T: NoImplicitArgs>(_: T) {} LL | fn no_implicit_args<T: NoImplicitArgs>(_: T) {}
| ^^^^^^^^^^^^^^ required by this bound in `no_implicit_args` | ^^^^^^^^^^^^^^ required by this bound in `no_implicit_args`
error[E0277]: the trait bound `(): bad_on_unimplemented::MissingArg` is not satisfied error[E0277]: the trait bound `(): bad_on_unimplemented::MissingArg` is not satisfied
--> $DIR/malformed_foreign_on_unimplemented.rs:29:17 --> $DIR/malformed_foreign_on_unimplemented.rs:30:17
| |
LL | missing_arg(()); LL | missing_arg(());
| ----------- ^^ {missing} | ----------- ^^ {missing}
@ -109,13 +109,13 @@ LL | missing_arg(());
| |
= help: the trait `bad_on_unimplemented::MissingArg` is not implemented for `()` = help: the trait `bad_on_unimplemented::MissingArg` is not implemented for `()`
note: required by a bound in `missing_arg` note: required by a bound in `missing_arg`
--> $DIR/malformed_foreign_on_unimplemented.rs:18:19 --> $DIR/malformed_foreign_on_unimplemented.rs:19:19
| |
LL | fn missing_arg<T: MissingArg>(_: T) {} LL | fn missing_arg<T: MissingArg>(_: T) {}
| ^^^^^^^^^^ required by this bound in `missing_arg` | ^^^^^^^^^^ required by this bound in `missing_arg`
error[E0277]: the trait bound `(): bad_on_unimplemented::BadArg` is not satisfied error[E0277]: the trait bound `(): bad_on_unimplemented::BadArg` is not satisfied
--> $DIR/malformed_foreign_on_unimplemented.rs:30:13 --> $DIR/malformed_foreign_on_unimplemented.rs:31:13
| |
LL | bad_arg(()); LL | bad_arg(());
| ------- ^^ {_} | ------- ^^ {_}
@ -124,7 +124,7 @@ LL | bad_arg(());
| |
= help: the trait `bad_on_unimplemented::BadArg` is not implemented for `()` = help: the trait `bad_on_unimplemented::BadArg` is not implemented for `()`
note: required by a bound in `bad_arg` note: required by a bound in `bad_arg`
--> $DIR/malformed_foreign_on_unimplemented.rs:19:15 --> $DIR/malformed_foreign_on_unimplemented.rs:20:15
| |
LL | fn bad_arg<T: BadArg>(_: T) {} LL | fn bad_arg<T: BadArg>(_: T) {}
| ^^^^^^ required by this bound in `bad_arg` | ^^^^^^ required by this bound in `bad_arg`

View file

@ -1,4 +1,5 @@
//@ check-pass //@ check-pass
//@ reference: attributes.diagnostic.namespace.unknown-invalid-syntax
#[diagnostic::non_existing_attribute] #[diagnostic::non_existing_attribute]
//~^WARN unknown diagnostic attribute //~^WARN unknown diagnostic attribute
pub trait Bar { pub trait Bar {

View file

@ -1,5 +1,5 @@
warning: unknown diagnostic attribute warning: unknown diagnostic attribute
--> $DIR/non_existing_attributes_accepted.rs:2:15 --> $DIR/non_existing_attributes_accepted.rs:3:15
| |
LL | #[diagnostic::non_existing_attribute] LL | #[diagnostic::non_existing_attribute]
| ^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^
@ -7,7 +7,7 @@ LL | #[diagnostic::non_existing_attribute]
= note: `#[warn(unknown_or_malformed_diagnostic_attributes)]` on by default = note: `#[warn(unknown_or_malformed_diagnostic_attributes)]` on by default
warning: unknown diagnostic attribute warning: unknown diagnostic attribute
--> $DIR/non_existing_attributes_accepted.rs:7:15 --> $DIR/non_existing_attributes_accepted.rs:8:15
| |
LL | #[diagnostic::non_existing_attribute(with_option = "foo")] LL | #[diagnostic::non_existing_attribute(with_option = "foo")]
| ^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^

View file

@ -1,3 +1,4 @@
//@ reference: attributes.diagnostic.on_unimplemented.invalid-string
#[diagnostic::on_unimplemented(message = "{{Test } thing")] #[diagnostic::on_unimplemented(message = "{{Test } thing")]
//~^WARN unmatched `}` found //~^WARN unmatched `}` found
//~|WARN unmatched `}` found //~|WARN unmatched `}` found

View file

@ -1,5 +1,5 @@
warning: unmatched `}` found warning: unmatched `}` found
--> $DIR/broken_format.rs:1:32 --> $DIR/broken_format.rs:2:32
| |
LL | #[diagnostic::on_unimplemented(message = "{{Test } thing")] LL | #[diagnostic::on_unimplemented(message = "{{Test } thing")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -7,7 +7,7 @@ LL | #[diagnostic::on_unimplemented(message = "{{Test } thing")]
= note: `#[warn(unknown_or_malformed_diagnostic_attributes)]` on by default = note: `#[warn(unknown_or_malformed_diagnostic_attributes)]` on by default
warning: positional format arguments are not allowed here warning: positional format arguments are not allowed here
--> $DIR/broken_format.rs:6:32 --> $DIR/broken_format.rs:7:32
| |
LL | #[diagnostic::on_unimplemented(message = "Test {}")] LL | #[diagnostic::on_unimplemented(message = "Test {}")]
| ^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^
@ -15,7 +15,7 @@ LL | #[diagnostic::on_unimplemented(message = "Test {}")]
= help: only named format arguments with the name of one of the generic types are allowed in this context = help: only named format arguments with the name of one of the generic types are allowed in this context
warning: positional format arguments are not allowed here warning: positional format arguments are not allowed here
--> $DIR/broken_format.rs:11:32 --> $DIR/broken_format.rs:12:32
| |
LL | #[diagnostic::on_unimplemented(message = "Test {1:}")] LL | #[diagnostic::on_unimplemented(message = "Test {1:}")]
| ^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^
@ -23,7 +23,7 @@ LL | #[diagnostic::on_unimplemented(message = "Test {1:}")]
= help: only named format arguments with the name of one of the generic types are allowed in this context = help: only named format arguments with the name of one of the generic types are allowed in this context
warning: invalid format specifier warning: invalid format specifier
--> $DIR/broken_format.rs:16:32 --> $DIR/broken_format.rs:17:32
| |
LL | #[diagnostic::on_unimplemented(message = "Test {Self:123}")] LL | #[diagnostic::on_unimplemented(message = "Test {Self:123}")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -31,19 +31,19 @@ LL | #[diagnostic::on_unimplemented(message = "Test {Self:123}")]
= help: no format specifier are supported in this position = help: no format specifier are supported in this position
warning: expected `}`, found `!` warning: expected `}`, found `!`
--> $DIR/broken_format.rs:21:32 --> $DIR/broken_format.rs:22:32
| |
LL | #[diagnostic::on_unimplemented(message = "Test {Self:!}")] LL | #[diagnostic::on_unimplemented(message = "Test {Self:!}")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unmatched `}` found warning: unmatched `}` found
--> $DIR/broken_format.rs:21:32 --> $DIR/broken_format.rs:22:32
| |
LL | #[diagnostic::on_unimplemented(message = "Test {Self:!}")] LL | #[diagnostic::on_unimplemented(message = "Test {Self:!}")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unmatched `}` found warning: unmatched `}` found
--> $DIR/broken_format.rs:1:32 --> $DIR/broken_format.rs:2:32
| |
LL | #[diagnostic::on_unimplemented(message = "{{Test } thing")] LL | #[diagnostic::on_unimplemented(message = "{{Test } thing")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -51,7 +51,7 @@ LL | #[diagnostic::on_unimplemented(message = "{{Test } thing")]
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no` = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
error[E0277]: {{Test } thing error[E0277]: {{Test } thing
--> $DIR/broken_format.rs:35:13 --> $DIR/broken_format.rs:36:13
| |
LL | check_1(()); LL | check_1(());
| ------- ^^ the trait `ImportantTrait1` is not implemented for `()` | ------- ^^ the trait `ImportantTrait1` is not implemented for `()`
@ -59,18 +59,18 @@ LL | check_1(());
| required by a bound introduced by this call | required by a bound introduced by this call
| |
help: this trait has no implementations, consider adding one help: this trait has no implementations, consider adding one
--> $DIR/broken_format.rs:4:1 --> $DIR/broken_format.rs:5:1
| |
LL | trait ImportantTrait1 {} LL | trait ImportantTrait1 {}
| ^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^
note: required by a bound in `check_1` note: required by a bound in `check_1`
--> $DIR/broken_format.rs:28:20 --> $DIR/broken_format.rs:29:20
| |
LL | fn check_1(_: impl ImportantTrait1) {} LL | fn check_1(_: impl ImportantTrait1) {}
| ^^^^^^^^^^^^^^^ required by this bound in `check_1` | ^^^^^^^^^^^^^^^ required by this bound in `check_1`
warning: positional format arguments are not allowed here warning: positional format arguments are not allowed here
--> $DIR/broken_format.rs:6:32 --> $DIR/broken_format.rs:7:32
| |
LL | #[diagnostic::on_unimplemented(message = "Test {}")] LL | #[diagnostic::on_unimplemented(message = "Test {}")]
| ^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^
@ -79,7 +79,7 @@ LL | #[diagnostic::on_unimplemented(message = "Test {}")]
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no` = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
error[E0277]: Test {} error[E0277]: Test {}
--> $DIR/broken_format.rs:37:13 --> $DIR/broken_format.rs:38:13
| |
LL | check_2(()); LL | check_2(());
| ------- ^^ the trait `ImportantTrait2` is not implemented for `()` | ------- ^^ the trait `ImportantTrait2` is not implemented for `()`
@ -87,18 +87,18 @@ LL | check_2(());
| required by a bound introduced by this call | required by a bound introduced by this call
| |
help: this trait has no implementations, consider adding one help: this trait has no implementations, consider adding one
--> $DIR/broken_format.rs:9:1 --> $DIR/broken_format.rs:10:1
| |
LL | trait ImportantTrait2 {} LL | trait ImportantTrait2 {}
| ^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^
note: required by a bound in `check_2` note: required by a bound in `check_2`
--> $DIR/broken_format.rs:29:20 --> $DIR/broken_format.rs:30:20
| |
LL | fn check_2(_: impl ImportantTrait2) {} LL | fn check_2(_: impl ImportantTrait2) {}
| ^^^^^^^^^^^^^^^ required by this bound in `check_2` | ^^^^^^^^^^^^^^^ required by this bound in `check_2`
warning: positional format arguments are not allowed here warning: positional format arguments are not allowed here
--> $DIR/broken_format.rs:11:32 --> $DIR/broken_format.rs:12:32
| |
LL | #[diagnostic::on_unimplemented(message = "Test {1:}")] LL | #[diagnostic::on_unimplemented(message = "Test {1:}")]
| ^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^
@ -107,7 +107,7 @@ LL | #[diagnostic::on_unimplemented(message = "Test {1:}")]
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no` = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
error[E0277]: Test {1} error[E0277]: Test {1}
--> $DIR/broken_format.rs:39:13 --> $DIR/broken_format.rs:40:13
| |
LL | check_3(()); LL | check_3(());
| ------- ^^ the trait `ImportantTrait3` is not implemented for `()` | ------- ^^ the trait `ImportantTrait3` is not implemented for `()`
@ -115,18 +115,18 @@ LL | check_3(());
| required by a bound introduced by this call | required by a bound introduced by this call
| |
help: this trait has no implementations, consider adding one help: this trait has no implementations, consider adding one
--> $DIR/broken_format.rs:14:1 --> $DIR/broken_format.rs:15:1
| |
LL | trait ImportantTrait3 {} LL | trait ImportantTrait3 {}
| ^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^
note: required by a bound in `check_3` note: required by a bound in `check_3`
--> $DIR/broken_format.rs:30:20 --> $DIR/broken_format.rs:31:20
| |
LL | fn check_3(_: impl ImportantTrait3) {} LL | fn check_3(_: impl ImportantTrait3) {}
| ^^^^^^^^^^^^^^^ required by this bound in `check_3` | ^^^^^^^^^^^^^^^ required by this bound in `check_3`
warning: invalid format specifier warning: invalid format specifier
--> $DIR/broken_format.rs:16:32 --> $DIR/broken_format.rs:17:32
| |
LL | #[diagnostic::on_unimplemented(message = "Test {Self:123}")] LL | #[diagnostic::on_unimplemented(message = "Test {Self:123}")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -135,7 +135,7 @@ LL | #[diagnostic::on_unimplemented(message = "Test {Self:123}")]
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no` = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
error[E0277]: Test () error[E0277]: Test ()
--> $DIR/broken_format.rs:41:13 --> $DIR/broken_format.rs:42:13
| |
LL | check_4(()); LL | check_4(());
| ------- ^^ the trait `ImportantTrait4` is not implemented for `()` | ------- ^^ the trait `ImportantTrait4` is not implemented for `()`
@ -143,18 +143,18 @@ LL | check_4(());
| required by a bound introduced by this call | required by a bound introduced by this call
| |
help: this trait has no implementations, consider adding one help: this trait has no implementations, consider adding one
--> $DIR/broken_format.rs:19:1 --> $DIR/broken_format.rs:20:1
| |
LL | trait ImportantTrait4 {} LL | trait ImportantTrait4 {}
| ^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^
note: required by a bound in `check_4` note: required by a bound in `check_4`
--> $DIR/broken_format.rs:31:20 --> $DIR/broken_format.rs:32:20
| |
LL | fn check_4(_: impl ImportantTrait4) {} LL | fn check_4(_: impl ImportantTrait4) {}
| ^^^^^^^^^^^^^^^ required by this bound in `check_4` | ^^^^^^^^^^^^^^^ required by this bound in `check_4`
warning: expected `}`, found `!` warning: expected `}`, found `!`
--> $DIR/broken_format.rs:21:32 --> $DIR/broken_format.rs:22:32
| |
LL | #[diagnostic::on_unimplemented(message = "Test {Self:!}")] LL | #[diagnostic::on_unimplemented(message = "Test {Self:!}")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^
@ -162,7 +162,7 @@ LL | #[diagnostic::on_unimplemented(message = "Test {Self:!}")]
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no` = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
warning: unmatched `}` found warning: unmatched `}` found
--> $DIR/broken_format.rs:21:32 --> $DIR/broken_format.rs:22:32
| |
LL | #[diagnostic::on_unimplemented(message = "Test {Self:!}")] LL | #[diagnostic::on_unimplemented(message = "Test {Self:!}")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^
@ -170,7 +170,7 @@ LL | #[diagnostic::on_unimplemented(message = "Test {Self:!}")]
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no` = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
error[E0277]: Test {Self:!} error[E0277]: Test {Self:!}
--> $DIR/broken_format.rs:43:13 --> $DIR/broken_format.rs:44:13
| |
LL | check_5(()); LL | check_5(());
| ------- ^^ the trait `ImportantTrait5` is not implemented for `()` | ------- ^^ the trait `ImportantTrait5` is not implemented for `()`
@ -178,12 +178,12 @@ LL | check_5(());
| required by a bound introduced by this call | required by a bound introduced by this call
| |
help: this trait has no implementations, consider adding one help: this trait has no implementations, consider adding one
--> $DIR/broken_format.rs:26:1 --> $DIR/broken_format.rs:27:1
| |
LL | trait ImportantTrait5 {} LL | trait ImportantTrait5 {}
| ^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^
note: required by a bound in `check_5` note: required by a bound in `check_5`
--> $DIR/broken_format.rs:32:20 --> $DIR/broken_format.rs:33:20
| |
LL | fn check_5(_: impl ImportantTrait5) {} LL | fn check_5(_: impl ImportantTrait5) {}
| ^^^^^^^^^^^^^^^ required by this bound in `check_5` | ^^^^^^^^^^^^^^^ required by this bound in `check_5`

View file

@ -1,3 +1,5 @@
//@ reference: attributes.diagnostic.on_unimplemented.intro
//@ reference: attributes.diagnostic.on_unimplemented.keys
#[diagnostic::on_unimplemented(message = "my message", label = "my label", note = "my note")] #[diagnostic::on_unimplemented(message = "my message", label = "my label", note = "my note")]
pub trait ProviderLt {} pub trait ProviderLt {}

View file

@ -1,5 +1,5 @@
error[E0599]: my message error[E0599]: my message
--> $DIR/custom-on-unimplemented-diagnostic.rs:15:7 --> $DIR/custom-on-unimplemented-diagnostic.rs:17:7
| |
LL | struct B; LL | struct B;
| -------- method `request` not found for this struct because it doesn't satisfy `B: ProviderExt` or `B: ProviderLt` | -------- method `request` not found for this struct because it doesn't satisfy `B: ProviderExt` or `B: ProviderLt`
@ -8,7 +8,7 @@ LL | B.request();
| ^^^^^^^ my label | ^^^^^^^ my label
| |
note: trait bound `B: ProviderLt` was not satisfied note: trait bound `B: ProviderLt` was not satisfied
--> $DIR/custom-on-unimplemented-diagnostic.rs:10:18 --> $DIR/custom-on-unimplemented-diagnostic.rs:12:18
| |
LL | impl<T: ?Sized + ProviderLt> ProviderExt for T {} LL | impl<T: ?Sized + ProviderLt> ProviderExt for T {}
| ^^^^^^^^^^ ----------- - | ^^^^^^^^^^ ----------- -
@ -16,13 +16,13 @@ LL | impl<T: ?Sized + ProviderLt> ProviderExt for T {}
| unsatisfied trait bound introduced here | unsatisfied trait bound introduced here
= note: my note = note: my note
note: the trait `ProviderLt` must be implemented note: the trait `ProviderLt` must be implemented
--> $DIR/custom-on-unimplemented-diagnostic.rs:2:1 --> $DIR/custom-on-unimplemented-diagnostic.rs:4:1
| |
LL | pub trait ProviderLt {} LL | pub trait ProviderLt {}
| ^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^
= help: items from traits can only be used if the trait is implemented and in scope = help: items from traits can only be used if the trait is implemented and in scope
note: `ProviderExt` defines an item `request`, perhaps you need to implement it note: `ProviderExt` defines an item `request`, perhaps you need to implement it
--> $DIR/custom-on-unimplemented-diagnostic.rs:4:1 --> $DIR/custom-on-unimplemented-diagnostic.rs:6:1
| |
LL | pub trait ProviderExt { LL | pub trait ProviderExt {
| ^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^

View file

@ -1,3 +1,7 @@
//@ reference: attributes.diagnostic.on_unimplemented.format-parameters
//@ reference: attributes.diagnostic.on_unimplemented.keys
//@ reference: attributes.diagnostic.on_unimplemented.syntax
//@ reference: attributes.diagnostic.on_unimplemented.invalid-formats
#[diagnostic::on_unimplemented( #[diagnostic::on_unimplemented(
on(_Self = "&str"), on(_Self = "&str"),
//~^WARN malformed `on_unimplemented` attribute //~^WARN malformed `on_unimplemented` attribute

View file

@ -1,5 +1,5 @@
warning: `#[diagnostic::on_unimplemented]` can only be applied to trait definitions warning: `#[diagnostic::on_unimplemented]` can only be applied to trait definitions
--> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:22:1 --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:26:1
| |
LL | #[diagnostic::on_unimplemented(message = "Not allowed to apply it on a impl")] LL | #[diagnostic::on_unimplemented(message = "Not allowed to apply it on a impl")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -7,7 +7,7 @@ LL | #[diagnostic::on_unimplemented(message = "Not allowed to apply it on a impl
= note: `#[warn(unknown_or_malformed_diagnostic_attributes)]` on by default = note: `#[warn(unknown_or_malformed_diagnostic_attributes)]` on by default
warning: malformed `on_unimplemented` attribute warning: malformed `on_unimplemented` attribute
--> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:2:5 --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:6:5
| |
LL | on(_Self = "&str"), LL | on(_Self = "&str"),
| ^^^^^^^^^^^^^^^^^^ invalid option found here | ^^^^^^^^^^^^^^^^^^ invalid option found here
@ -15,7 +15,7 @@ LL | on(_Self = "&str"),
= help: only `message`, `note` and `label` are allowed as options = help: only `message`, `note` and `label` are allowed as options
warning: malformed `on_unimplemented` attribute warning: malformed `on_unimplemented` attribute
--> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:8:5 --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:12:5
| |
LL | parent_label = "in this scope", LL | parent_label = "in this scope",
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ invalid option found here | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ invalid option found here
@ -23,7 +23,7 @@ LL | parent_label = "in this scope",
= help: only `message`, `note` and `label` are allowed as options = help: only `message`, `note` and `label` are allowed as options
warning: malformed `on_unimplemented` attribute warning: malformed `on_unimplemented` attribute
--> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:11:5 --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:15:5
| |
LL | append_const_msg LL | append_const_msg
| ^^^^^^^^^^^^^^^^ invalid option found here | ^^^^^^^^^^^^^^^^ invalid option found here
@ -31,7 +31,7 @@ LL | append_const_msg
= help: only `message`, `note` and `label` are allowed as options = help: only `message`, `note` and `label` are allowed as options
warning: malformed `on_unimplemented` attribute warning: malformed `on_unimplemented` attribute
--> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:17:32 --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:21:32
| |
LL | #[diagnostic::on_unimplemented = "Message"] LL | #[diagnostic::on_unimplemented = "Message"]
| ^^^^^^^^^^^ invalid option found here | ^^^^^^^^^^^ invalid option found here
@ -39,7 +39,7 @@ LL | #[diagnostic::on_unimplemented = "Message"]
= help: only `message`, `note` and `label` are allowed as options = help: only `message`, `note` and `label` are allowed as options
warning: there is no parameter `from_desugaring` on trait `Baz` warning: there is no parameter `from_desugaring` on trait `Baz`
--> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:29:5 --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:33:5
| |
LL | message = "{from_desugaring}{direct}{cause}{integral}{integer}", LL | message = "{from_desugaring}{direct}{cause}{integral}{integer}",
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -47,7 +47,7 @@ LL | message = "{from_desugaring}{direct}{cause}{integral}{integer}",
= help: expect either a generic argument name or `{Self}` as format argument = help: expect either a generic argument name or `{Self}` as format argument
warning: there is no parameter `direct` on trait `Baz` warning: there is no parameter `direct` on trait `Baz`
--> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:29:5 --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:33:5
| |
LL | message = "{from_desugaring}{direct}{cause}{integral}{integer}", LL | message = "{from_desugaring}{direct}{cause}{integral}{integer}",
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -55,7 +55,7 @@ LL | message = "{from_desugaring}{direct}{cause}{integral}{integer}",
= help: expect either a generic argument name or `{Self}` as format argument = help: expect either a generic argument name or `{Self}` as format argument
warning: there is no parameter `cause` on trait `Baz` warning: there is no parameter `cause` on trait `Baz`
--> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:29:5 --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:33:5
| |
LL | message = "{from_desugaring}{direct}{cause}{integral}{integer}", LL | message = "{from_desugaring}{direct}{cause}{integral}{integer}",
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -63,7 +63,7 @@ LL | message = "{from_desugaring}{direct}{cause}{integral}{integer}",
= help: expect either a generic argument name or `{Self}` as format argument = help: expect either a generic argument name or `{Self}` as format argument
warning: there is no parameter `integral` on trait `Baz` warning: there is no parameter `integral` on trait `Baz`
--> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:29:5 --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:33:5
| |
LL | message = "{from_desugaring}{direct}{cause}{integral}{integer}", LL | message = "{from_desugaring}{direct}{cause}{integral}{integer}",
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -71,7 +71,7 @@ LL | message = "{from_desugaring}{direct}{cause}{integral}{integer}",
= help: expect either a generic argument name or `{Self}` as format argument = help: expect either a generic argument name or `{Self}` as format argument
warning: there is no parameter `integer` on trait `Baz` warning: there is no parameter `integer` on trait `Baz`
--> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:29:5 --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:33:5
| |
LL | message = "{from_desugaring}{direct}{cause}{integral}{integer}", LL | message = "{from_desugaring}{direct}{cause}{integral}{integer}",
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -79,7 +79,7 @@ LL | message = "{from_desugaring}{direct}{cause}{integral}{integer}",
= help: expect either a generic argument name or `{Self}` as format argument = help: expect either a generic argument name or `{Self}` as format argument
warning: there is no parameter `float` on trait `Baz` warning: there is no parameter `float` on trait `Baz`
--> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:40:5 --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:44:5
| |
LL | label = "{float}{_Self}{crate_local}{Trait}{ItemContext}" LL | label = "{float}{_Self}{crate_local}{Trait}{ItemContext}"
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -87,7 +87,7 @@ LL | label = "{float}{_Self}{crate_local}{Trait}{ItemContext}"
= help: expect either a generic argument name or `{Self}` as format argument = help: expect either a generic argument name or `{Self}` as format argument
warning: there is no parameter `_Self` on trait `Baz` warning: there is no parameter `_Self` on trait `Baz`
--> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:40:5 --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:44:5
| |
LL | label = "{float}{_Self}{crate_local}{Trait}{ItemContext}" LL | label = "{float}{_Self}{crate_local}{Trait}{ItemContext}"
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -95,7 +95,7 @@ LL | label = "{float}{_Self}{crate_local}{Trait}{ItemContext}"
= help: expect either a generic argument name or `{Self}` as format argument = help: expect either a generic argument name or `{Self}` as format argument
warning: there is no parameter `crate_local` on trait `Baz` warning: there is no parameter `crate_local` on trait `Baz`
--> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:40:5 --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:44:5
| |
LL | label = "{float}{_Self}{crate_local}{Trait}{ItemContext}" LL | label = "{float}{_Self}{crate_local}{Trait}{ItemContext}"
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -103,7 +103,7 @@ LL | label = "{float}{_Self}{crate_local}{Trait}{ItemContext}"
= help: expect either a generic argument name or `{Self}` as format argument = help: expect either a generic argument name or `{Self}` as format argument
warning: there is no parameter `Trait` on trait `Baz` warning: there is no parameter `Trait` on trait `Baz`
--> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:40:5 --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:44:5
| |
LL | label = "{float}{_Self}{crate_local}{Trait}{ItemContext}" LL | label = "{float}{_Self}{crate_local}{Trait}{ItemContext}"
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -111,7 +111,7 @@ LL | label = "{float}{_Self}{crate_local}{Trait}{ItemContext}"
= help: expect either a generic argument name or `{Self}` as format argument = help: expect either a generic argument name or `{Self}` as format argument
warning: there is no parameter `ItemContext` on trait `Baz` warning: there is no parameter `ItemContext` on trait `Baz`
--> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:40:5 --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:44:5
| |
LL | label = "{float}{_Self}{crate_local}{Trait}{ItemContext}" LL | label = "{float}{_Self}{crate_local}{Trait}{ItemContext}"
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -119,7 +119,7 @@ LL | label = "{float}{_Self}{crate_local}{Trait}{ItemContext}"
= help: expect either a generic argument name or `{Self}` as format argument = help: expect either a generic argument name or `{Self}` as format argument
warning: malformed `on_unimplemented` attribute warning: malformed `on_unimplemented` attribute
--> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:2:5 --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:6:5
| |
LL | on(_Self = "&str"), LL | on(_Self = "&str"),
| ^^^^^^^^^^^^^^^^^^ invalid option found here | ^^^^^^^^^^^^^^^^^^ invalid option found here
@ -128,7 +128,7 @@ LL | on(_Self = "&str"),
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no` = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
warning: malformed `on_unimplemented` attribute warning: malformed `on_unimplemented` attribute
--> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:8:5 --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:12:5
| |
LL | parent_label = "in this scope", LL | parent_label = "in this scope",
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ invalid option found here | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ invalid option found here
@ -137,7 +137,7 @@ LL | parent_label = "in this scope",
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no` = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
warning: malformed `on_unimplemented` attribute warning: malformed `on_unimplemented` attribute
--> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:11:5 --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:15:5
| |
LL | append_const_msg LL | append_const_msg
| ^^^^^^^^^^^^^^^^ invalid option found here | ^^^^^^^^^^^^^^^^ invalid option found here
@ -146,7 +146,7 @@ LL | append_const_msg
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no` = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
error[E0277]: trait has `()` and `i32` as params error[E0277]: trait has `()` and `i32` as params
--> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:59:15 --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:63:15
| |
LL | takes_foo(()); LL | takes_foo(());
| --------- ^^ trait has `()` and `i32` as params | --------- ^^ trait has `()` and `i32` as params
@ -156,18 +156,18 @@ LL | takes_foo(());
= help: the trait `Foo<i32>` is not implemented for `()` = help: the trait `Foo<i32>` is not implemented for `()`
= note: trait has `()` and `i32` as params = note: trait has `()` and `i32` as params
help: this trait has no implementations, consider adding one help: this trait has no implementations, consider adding one
--> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:15:1 --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:19:1
| |
LL | trait Foo<T> {} LL | trait Foo<T> {}
| ^^^^^^^^^^^^ | ^^^^^^^^^^^^
note: required by a bound in `takes_foo` note: required by a bound in `takes_foo`
--> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:54:22 --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:58:22
| |
LL | fn takes_foo(_: impl Foo<i32>) {} LL | fn takes_foo(_: impl Foo<i32>) {}
| ^^^^^^^^ required by this bound in `takes_foo` | ^^^^^^^^ required by this bound in `takes_foo`
warning: malformed `on_unimplemented` attribute warning: malformed `on_unimplemented` attribute
--> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:17:32 --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:21:32
| |
LL | #[diagnostic::on_unimplemented = "Message"] LL | #[diagnostic::on_unimplemented = "Message"]
| ^^^^^^^^^^^ invalid option found here | ^^^^^^^^^^^ invalid option found here
@ -176,7 +176,7 @@ LL | #[diagnostic::on_unimplemented = "Message"]
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no` = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
error[E0277]: the trait bound `(): Bar` is not satisfied error[E0277]: the trait bound `(): Bar` is not satisfied
--> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:61:15 --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:65:15
| |
LL | takes_bar(()); LL | takes_bar(());
| --------- ^^ the trait `Bar` is not implemented for `()` | --------- ^^ the trait `Bar` is not implemented for `()`
@ -185,13 +185,13 @@ LL | takes_bar(());
| |
= help: the trait `Bar` is implemented for `i32` = help: the trait `Bar` is implemented for `i32`
note: required by a bound in `takes_bar` note: required by a bound in `takes_bar`
--> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:55:22 --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:59:22
| |
LL | fn takes_bar(_: impl Bar) {} LL | fn takes_bar(_: impl Bar) {}
| ^^^ required by this bound in `takes_bar` | ^^^ required by this bound in `takes_bar`
warning: there is no parameter `from_desugaring` on trait `Baz` warning: there is no parameter `from_desugaring` on trait `Baz`
--> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:29:5 --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:33:5
| |
LL | message = "{from_desugaring}{direct}{cause}{integral}{integer}", LL | message = "{from_desugaring}{direct}{cause}{integral}{integer}",
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -200,7 +200,7 @@ LL | message = "{from_desugaring}{direct}{cause}{integral}{integer}",
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no` = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
warning: there is no parameter `direct` on trait `Baz` warning: there is no parameter `direct` on trait `Baz`
--> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:29:5 --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:33:5
| |
LL | message = "{from_desugaring}{direct}{cause}{integral}{integer}", LL | message = "{from_desugaring}{direct}{cause}{integral}{integer}",
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -209,7 +209,7 @@ LL | message = "{from_desugaring}{direct}{cause}{integral}{integer}",
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no` = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
warning: there is no parameter `cause` on trait `Baz` warning: there is no parameter `cause` on trait `Baz`
--> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:29:5 --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:33:5
| |
LL | message = "{from_desugaring}{direct}{cause}{integral}{integer}", LL | message = "{from_desugaring}{direct}{cause}{integral}{integer}",
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -218,7 +218,7 @@ LL | message = "{from_desugaring}{direct}{cause}{integral}{integer}",
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no` = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
warning: there is no parameter `integral` on trait `Baz` warning: there is no parameter `integral` on trait `Baz`
--> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:29:5 --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:33:5
| |
LL | message = "{from_desugaring}{direct}{cause}{integral}{integer}", LL | message = "{from_desugaring}{direct}{cause}{integral}{integer}",
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -227,7 +227,7 @@ LL | message = "{from_desugaring}{direct}{cause}{integral}{integer}",
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no` = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
warning: there is no parameter `integer` on trait `Baz` warning: there is no parameter `integer` on trait `Baz`
--> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:29:5 --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:33:5
| |
LL | message = "{from_desugaring}{direct}{cause}{integral}{integer}", LL | message = "{from_desugaring}{direct}{cause}{integral}{integer}",
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -236,7 +236,7 @@ LL | message = "{from_desugaring}{direct}{cause}{integral}{integer}",
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no` = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
warning: there is no parameter `float` on trait `Baz` warning: there is no parameter `float` on trait `Baz`
--> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:40:5 --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:44:5
| |
LL | label = "{float}{_Self}{crate_local}{Trait}{ItemContext}" LL | label = "{float}{_Self}{crate_local}{Trait}{ItemContext}"
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -245,7 +245,7 @@ LL | label = "{float}{_Self}{crate_local}{Trait}{ItemContext}"
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no` = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
warning: there is no parameter `_Self` on trait `Baz` warning: there is no parameter `_Self` on trait `Baz`
--> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:40:5 --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:44:5
| |
LL | label = "{float}{_Self}{crate_local}{Trait}{ItemContext}" LL | label = "{float}{_Self}{crate_local}{Trait}{ItemContext}"
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -254,7 +254,7 @@ LL | label = "{float}{_Self}{crate_local}{Trait}{ItemContext}"
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no` = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
warning: there is no parameter `crate_local` on trait `Baz` warning: there is no parameter `crate_local` on trait `Baz`
--> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:40:5 --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:44:5
| |
LL | label = "{float}{_Self}{crate_local}{Trait}{ItemContext}" LL | label = "{float}{_Self}{crate_local}{Trait}{ItemContext}"
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -263,7 +263,7 @@ LL | label = "{float}{_Self}{crate_local}{Trait}{ItemContext}"
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no` = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
warning: there is no parameter `Trait` on trait `Baz` warning: there is no parameter `Trait` on trait `Baz`
--> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:40:5 --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:44:5
| |
LL | label = "{float}{_Self}{crate_local}{Trait}{ItemContext}" LL | label = "{float}{_Self}{crate_local}{Trait}{ItemContext}"
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -272,7 +272,7 @@ LL | label = "{float}{_Self}{crate_local}{Trait}{ItemContext}"
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no` = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
warning: there is no parameter `ItemContext` on trait `Baz` warning: there is no parameter `ItemContext` on trait `Baz`
--> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:40:5 --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:44:5
| |
LL | label = "{float}{_Self}{crate_local}{Trait}{ItemContext}" LL | label = "{float}{_Self}{crate_local}{Trait}{ItemContext}"
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -281,7 +281,7 @@ LL | label = "{float}{_Self}{crate_local}{Trait}{ItemContext}"
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no` = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
error[E0277]: {from_desugaring}{direct}{cause}{integral}{integer} error[E0277]: {from_desugaring}{direct}{cause}{integral}{integer}
--> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:63:15 --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:67:15
| |
LL | takes_baz(()); LL | takes_baz(());
| --------- ^^ {float}{_Self}{crate_local}{Trait}{ItemContext} | --------- ^^ {float}{_Self}{crate_local}{Trait}{ItemContext}
@ -290,12 +290,12 @@ LL | takes_baz(());
| |
= help: the trait `Baz` is not implemented for `()` = help: the trait `Baz` is not implemented for `()`
help: this trait has no implementations, consider adding one help: this trait has no implementations, consider adding one
--> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:52:1 --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:56:1
| |
LL | trait Baz {} LL | trait Baz {}
| ^^^^^^^^^ | ^^^^^^^^^
note: required by a bound in `takes_baz` note: required by a bound in `takes_baz`
--> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:56:22 --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:60:22
| |
LL | fn takes_baz(_: impl Baz) {} LL | fn takes_baz(_: impl Baz) {}
| ^^^ required by this bound in `takes_baz` | ^^^ required by this bound in `takes_baz`

View file

@ -1,3 +1,5 @@
//@ reference: attributes.diagnostic.on_unimplemented.syntax
//@ reference: attributes.diagnostic.on_unimplemented.unknown-keys
#[diagnostic::on_unimplemented(unsupported = "foo")] #[diagnostic::on_unimplemented(unsupported = "foo")]
//~^WARN malformed `on_unimplemented` attribute //~^WARN malformed `on_unimplemented` attribute
//~|WARN malformed `on_unimplemented` attribute //~|WARN malformed `on_unimplemented` attribute

View file

@ -1,5 +1,5 @@
warning: `#[diagnostic::on_unimplemented]` can only be applied to trait definitions warning: `#[diagnostic::on_unimplemented]` can only be applied to trait definitions
--> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:6:1 --> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:8:1
| |
LL | #[diagnostic::on_unimplemented(message = "Baz")] LL | #[diagnostic::on_unimplemented(message = "Baz")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -7,7 +7,7 @@ LL | #[diagnostic::on_unimplemented(message = "Baz")]
= note: `#[warn(unknown_or_malformed_diagnostic_attributes)]` on by default = note: `#[warn(unknown_or_malformed_diagnostic_attributes)]` on by default
warning: malformed `on_unimplemented` attribute warning: malformed `on_unimplemented` attribute
--> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:1:32 --> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:3:32
| |
LL | #[diagnostic::on_unimplemented(unsupported = "foo")] LL | #[diagnostic::on_unimplemented(unsupported = "foo")]
| ^^^^^^^^^^^^^^^^^^^ invalid option found here | ^^^^^^^^^^^^^^^^^^^ invalid option found here
@ -15,7 +15,7 @@ LL | #[diagnostic::on_unimplemented(unsupported = "foo")]
= help: only `message`, `note` and `label` are allowed as options = help: only `message`, `note` and `label` are allowed as options
warning: malformed `on_unimplemented` attribute warning: malformed `on_unimplemented` attribute
--> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:10:50 --> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:12:50
| |
LL | #[diagnostic::on_unimplemented(message = "Boom", unsupported = "Bar")] LL | #[diagnostic::on_unimplemented(message = "Boom", unsupported = "Bar")]
| ^^^^^^^^^^^^^^^^^^^ invalid option found here | ^^^^^^^^^^^^^^^^^^^ invalid option found here
@ -23,7 +23,7 @@ LL | #[diagnostic::on_unimplemented(message = "Boom", unsupported = "Bar")]
= help: only `message`, `note` and `label` are allowed as options = help: only `message`, `note` and `label` are allowed as options
warning: malformed `on_unimplemented` attribute warning: malformed `on_unimplemented` attribute
--> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:15:50 --> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:17:50
| |
LL | #[diagnostic::on_unimplemented(message = "Boom", on(_Self = "i32", message = "whatever"))] LL | #[diagnostic::on_unimplemented(message = "Boom", on(_Self = "i32", message = "whatever"))]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ invalid option found here | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ invalid option found here
@ -31,7 +31,7 @@ LL | #[diagnostic::on_unimplemented(message = "Boom", on(_Self = "i32", message
= help: only `message`, `note` and `label` are allowed as options = help: only `message`, `note` and `label` are allowed as options
warning: malformed `on_unimplemented` attribute warning: malformed `on_unimplemented` attribute
--> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:20:32 --> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:22:32
| |
LL | #[diagnostic::on_unimplemented = "boom"] LL | #[diagnostic::on_unimplemented = "boom"]
| ^^^^^^^^ invalid option found here | ^^^^^^^^ invalid option found here
@ -39,7 +39,7 @@ LL | #[diagnostic::on_unimplemented = "boom"]
= help: only `message`, `note` and `label` are allowed as options = help: only `message`, `note` and `label` are allowed as options
warning: missing options for `on_unimplemented` attribute warning: missing options for `on_unimplemented` attribute
--> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:24:1 --> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:26:1
| |
LL | #[diagnostic::on_unimplemented] LL | #[diagnostic::on_unimplemented]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -47,7 +47,7 @@ LL | #[diagnostic::on_unimplemented]
= help: at least one of the `message`, `note` and `label` options are expected = help: at least one of the `message`, `note` and `label` options are expected
warning: there is no parameter `DoesNotExist` on trait `Test` warning: there is no parameter `DoesNotExist` on trait `Test`
--> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:29:32 --> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:31:32
| |
LL | #[diagnostic::on_unimplemented(message = "{DoesNotExist}")] LL | #[diagnostic::on_unimplemented(message = "{DoesNotExist}")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -55,7 +55,7 @@ LL | #[diagnostic::on_unimplemented(message = "{DoesNotExist}")]
= help: expect either a generic argument name or `{Self}` as format argument = help: expect either a generic argument name or `{Self}` as format argument
warning: malformed `on_unimplemented` attribute warning: malformed `on_unimplemented` attribute
--> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:1:32 --> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:3:32
| |
LL | #[diagnostic::on_unimplemented(unsupported = "foo")] LL | #[diagnostic::on_unimplemented(unsupported = "foo")]
| ^^^^^^^^^^^^^^^^^^^ invalid option found here | ^^^^^^^^^^^^^^^^^^^ invalid option found here
@ -64,7 +64,7 @@ LL | #[diagnostic::on_unimplemented(unsupported = "foo")]
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no` = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
error[E0277]: the trait bound `i32: Foo` is not satisfied error[E0277]: the trait bound `i32: Foo` is not satisfied
--> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:41:14 --> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:43:14
| |
LL | take_foo(1_i32); LL | take_foo(1_i32);
| -------- ^^^^^ the trait `Foo` is not implemented for `i32` | -------- ^^^^^ the trait `Foo` is not implemented for `i32`
@ -72,18 +72,18 @@ LL | take_foo(1_i32);
| required by a bound introduced by this call | required by a bound introduced by this call
| |
help: this trait has no implementations, consider adding one help: this trait has no implementations, consider adding one
--> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:4:1 --> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:6:1
| |
LL | trait Foo {} LL | trait Foo {}
| ^^^^^^^^^ | ^^^^^^^^^
note: required by a bound in `take_foo` note: required by a bound in `take_foo`
--> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:34:21 --> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:36:21
| |
LL | fn take_foo(_: impl Foo) {} LL | fn take_foo(_: impl Foo) {}
| ^^^ required by this bound in `take_foo` | ^^^ required by this bound in `take_foo`
warning: malformed `on_unimplemented` attribute warning: malformed `on_unimplemented` attribute
--> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:10:50 --> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:12:50
| |
LL | #[diagnostic::on_unimplemented(message = "Boom", unsupported = "Bar")] LL | #[diagnostic::on_unimplemented(message = "Boom", unsupported = "Bar")]
| ^^^^^^^^^^^^^^^^^^^ invalid option found here | ^^^^^^^^^^^^^^^^^^^ invalid option found here
@ -92,7 +92,7 @@ LL | #[diagnostic::on_unimplemented(message = "Boom", unsupported = "Bar")]
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no` = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
error[E0277]: Boom error[E0277]: Boom
--> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:43:14 --> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:45:14
| |
LL | take_baz(1_i32); LL | take_baz(1_i32);
| -------- ^^^^^ the trait `Baz` is not implemented for `i32` | -------- ^^^^^ the trait `Baz` is not implemented for `i32`
@ -100,18 +100,18 @@ LL | take_baz(1_i32);
| required by a bound introduced by this call | required by a bound introduced by this call
| |
help: this trait has no implementations, consider adding one help: this trait has no implementations, consider adding one
--> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:13:1 --> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:15:1
| |
LL | trait Baz {} LL | trait Baz {}
| ^^^^^^^^^ | ^^^^^^^^^
note: required by a bound in `take_baz` note: required by a bound in `take_baz`
--> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:35:21 --> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:37:21
| |
LL | fn take_baz(_: impl Baz) {} LL | fn take_baz(_: impl Baz) {}
| ^^^ required by this bound in `take_baz` | ^^^ required by this bound in `take_baz`
warning: malformed `on_unimplemented` attribute warning: malformed `on_unimplemented` attribute
--> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:15:50 --> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:17:50
| |
LL | #[diagnostic::on_unimplemented(message = "Boom", on(_Self = "i32", message = "whatever"))] LL | #[diagnostic::on_unimplemented(message = "Boom", on(_Self = "i32", message = "whatever"))]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ invalid option found here | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ invalid option found here
@ -120,7 +120,7 @@ LL | #[diagnostic::on_unimplemented(message = "Boom", on(_Self = "i32", message
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no` = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
error[E0277]: Boom error[E0277]: Boom
--> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:45:15 --> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:47:15
| |
LL | take_boom(1_i32); LL | take_boom(1_i32);
| --------- ^^^^^ the trait `Boom` is not implemented for `i32` | --------- ^^^^^ the trait `Boom` is not implemented for `i32`
@ -128,18 +128,18 @@ LL | take_boom(1_i32);
| required by a bound introduced by this call | required by a bound introduced by this call
| |
help: this trait has no implementations, consider adding one help: this trait has no implementations, consider adding one
--> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:18:1 --> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:20:1
| |
LL | trait Boom {} LL | trait Boom {}
| ^^^^^^^^^^ | ^^^^^^^^^^
note: required by a bound in `take_boom` note: required by a bound in `take_boom`
--> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:36:22 --> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:38:22
| |
LL | fn take_boom(_: impl Boom) {} LL | fn take_boom(_: impl Boom) {}
| ^^^^ required by this bound in `take_boom` | ^^^^ required by this bound in `take_boom`
warning: missing options for `on_unimplemented` attribute warning: missing options for `on_unimplemented` attribute
--> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:24:1 --> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:26:1
| |
LL | #[diagnostic::on_unimplemented] LL | #[diagnostic::on_unimplemented]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -148,7 +148,7 @@ LL | #[diagnostic::on_unimplemented]
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no` = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
error[E0277]: the trait bound `i32: Whatever` is not satisfied error[E0277]: the trait bound `i32: Whatever` is not satisfied
--> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:47:19 --> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:49:19
| |
LL | take_whatever(1_i32); LL | take_whatever(1_i32);
| ------------- ^^^^^ the trait `Whatever` is not implemented for `i32` | ------------- ^^^^^ the trait `Whatever` is not implemented for `i32`
@ -156,18 +156,18 @@ LL | take_whatever(1_i32);
| required by a bound introduced by this call | required by a bound introduced by this call
| |
help: this trait has no implementations, consider adding one help: this trait has no implementations, consider adding one
--> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:27:1 --> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:29:1
| |
LL | trait Whatever {} LL | trait Whatever {}
| ^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^
note: required by a bound in `take_whatever` note: required by a bound in `take_whatever`
--> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:37:26 --> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:39:26
| |
LL | fn take_whatever(_: impl Whatever) {} LL | fn take_whatever(_: impl Whatever) {}
| ^^^^^^^^ required by this bound in `take_whatever` | ^^^^^^^^ required by this bound in `take_whatever`
warning: there is no parameter `DoesNotExist` on trait `Test` warning: there is no parameter `DoesNotExist` on trait `Test`
--> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:29:32 --> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:31:32
| |
LL | #[diagnostic::on_unimplemented(message = "{DoesNotExist}")] LL | #[diagnostic::on_unimplemented(message = "{DoesNotExist}")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -176,7 +176,7 @@ LL | #[diagnostic::on_unimplemented(message = "{DoesNotExist}")]
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no` = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
error[E0277]: {DoesNotExist} error[E0277]: {DoesNotExist}
--> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:49:15 --> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:51:15
| |
LL | take_test(()); LL | take_test(());
| --------- ^^ the trait `Test` is not implemented for `()` | --------- ^^ the trait `Test` is not implemented for `()`
@ -184,12 +184,12 @@ LL | take_test(());
| required by a bound introduced by this call | required by a bound introduced by this call
| |
help: this trait has no implementations, consider adding one help: this trait has no implementations, consider adding one
--> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:32:1 --> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:34:1
| |
LL | trait Test {} LL | trait Test {}
| ^^^^^^^^^^ | ^^^^^^^^^^
note: required by a bound in `take_test` note: required by a bound in `take_test`
--> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:38:22 --> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:40:22
| |
LL | fn take_test(_: impl Test) {} LL | fn take_test(_: impl Test) {}
| ^^^^ required by this bound in `take_test` | ^^^^ required by this bound in `take_test`

View file

@ -1,4 +1,5 @@
//@ aux-build:other.rs //@ aux-build:other.rs
//@ reference: attributes.diagnostic.on_unimplemented.intro
extern crate other; extern crate other;

View file

@ -1,5 +1,5 @@
error[E0277]: Message error[E0277]: Message
--> $DIR/error_is_shown_in_downstream_crates.rs:10:14 --> $DIR/error_is_shown_in_downstream_crates.rs:11:14
| |
LL | take_foo(()); LL | take_foo(());
| -------- ^^ label | -------- ^^ label
@ -9,7 +9,7 @@ LL | take_foo(());
= help: the trait `Foo` is not implemented for `()` = help: the trait `Foo` is not implemented for `()`
= note: Note = note: Note
note: required by a bound in `take_foo` note: required by a bound in `take_foo`
--> $DIR/error_is_shown_in_downstream_crates.rs:7:21 --> $DIR/error_is_shown_in_downstream_crates.rs:8:21
| |
LL | fn take_foo(_: impl Foo) {} LL | fn take_foo(_: impl Foo) {}
| ^^^ required by this bound in `take_foo` | ^^^ required by this bound in `take_foo`

View file

@ -1,3 +1,5 @@
//@ reference: attributes.diagnostic.on_unimplemented.repetition
//@ reference: attributes.diagnostic.on_unimplemented.syntax
#[diagnostic::on_unimplemented( #[diagnostic::on_unimplemented(
if(Self = "()"), if(Self = "()"),
//~^WARN malformed `on_unimplemented` attribute //~^WARN malformed `on_unimplemented` attribute

View file

@ -1,5 +1,5 @@
warning: malformed `on_unimplemented` attribute warning: malformed `on_unimplemented` attribute
--> $DIR/ignore_unsupported_options_and_continue_to_use_fallback.rs:2:5 --> $DIR/ignore_unsupported_options_and_continue_to_use_fallback.rs:4:5
| |
LL | if(Self = "()"), LL | if(Self = "()"),
| ^^^^^^^^^^^^^^^ invalid option found here | ^^^^^^^^^^^^^^^ invalid option found here
@ -8,7 +8,7 @@ LL | if(Self = "()"),
= note: `#[warn(unknown_or_malformed_diagnostic_attributes)]` on by default = note: `#[warn(unknown_or_malformed_diagnostic_attributes)]` on by default
warning: `message` is ignored due to previous definition of `message` warning: `message` is ignored due to previous definition of `message`
--> $DIR/ignore_unsupported_options_and_continue_to_use_fallback.rs:8:32 --> $DIR/ignore_unsupported_options_and_continue_to_use_fallback.rs:10:32
| |
LL | message = "custom message", LL | message = "custom message",
| -------------------------- `message` is first declared here | -------------------------- `message` is first declared here
@ -17,7 +17,7 @@ LL | #[diagnostic::on_unimplemented(message = "fallback!!")]
| ^^^^^^^^^^^^^^^^^^^^^^ `message` is already declared here | ^^^^^^^^^^^^^^^^^^^^^^ `message` is already declared here
warning: malformed `on_unimplemented` attribute warning: malformed `on_unimplemented` attribute
--> $DIR/ignore_unsupported_options_and_continue_to_use_fallback.rs:2:5 --> $DIR/ignore_unsupported_options_and_continue_to_use_fallback.rs:4:5
| |
LL | if(Self = "()"), LL | if(Self = "()"),
| ^^^^^^^^^^^^^^^ invalid option found here | ^^^^^^^^^^^^^^^ invalid option found here
@ -26,7 +26,7 @@ LL | if(Self = "()"),
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no` = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
warning: `message` is ignored due to previous definition of `message` warning: `message` is ignored due to previous definition of `message`
--> $DIR/ignore_unsupported_options_and_continue_to_use_fallback.rs:8:32 --> $DIR/ignore_unsupported_options_and_continue_to_use_fallback.rs:10:32
| |
LL | message = "custom message", LL | message = "custom message",
| -------------------------- `message` is first declared here | -------------------------- `message` is first declared here
@ -37,7 +37,7 @@ LL | #[diagnostic::on_unimplemented(message = "fallback!!")]
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no` = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
error[E0277]: custom message error[E0277]: custom message
--> $DIR/ignore_unsupported_options_and_continue_to_use_fallback.rs:18:15 --> $DIR/ignore_unsupported_options_and_continue_to_use_fallback.rs:20:15
| |
LL | takes_foo(()); LL | takes_foo(());
| --------- ^^ fallback label | --------- ^^ fallback label
@ -48,12 +48,12 @@ LL | takes_foo(());
= note: custom note = note: custom note
= note: fallback note = note: fallback note
help: this trait has no implementations, consider adding one help: this trait has no implementations, consider adding one
--> $DIR/ignore_unsupported_options_and_continue_to_use_fallback.rs:13:1 --> $DIR/ignore_unsupported_options_and_continue_to_use_fallback.rs:15:1
| |
LL | trait Foo {} LL | trait Foo {}
| ^^^^^^^^^ | ^^^^^^^^^
note: required by a bound in `takes_foo` note: required by a bound in `takes_foo`
--> $DIR/ignore_unsupported_options_and_continue_to_use_fallback.rs:15:22 --> $DIR/ignore_unsupported_options_and_continue_to_use_fallback.rs:17:22
| |
LL | fn takes_foo(_: impl Foo) {} LL | fn takes_foo(_: impl Foo) {}
| ^^^ required by this bound in `takes_foo` | ^^^ required by this bound in `takes_foo`

View file

@ -1,3 +1,4 @@
//@ reference: attributes.diagnostic.on_unimplemented.note-repetition
#[diagnostic::on_unimplemented(message = "Foo", label = "Bar", note = "Baz", note = "Boom")] #[diagnostic::on_unimplemented(message = "Foo", label = "Bar", note = "Baz", note = "Boom")]
trait Foo {} trait Foo {}

View file

@ -1,5 +1,5 @@
error[E0277]: Foo error[E0277]: Foo
--> $DIR/multiple_notes.rs:12:15 --> $DIR/multiple_notes.rs:13:15
| |
LL | takes_foo(()); LL | takes_foo(());
| --------- ^^ Bar | --------- ^^ Bar
@ -10,18 +10,18 @@ LL | takes_foo(());
= note: Baz = note: Baz
= note: Boom = note: Boom
help: this trait has no implementations, consider adding one help: this trait has no implementations, consider adding one
--> $DIR/multiple_notes.rs:2:1 --> $DIR/multiple_notes.rs:3:1
| |
LL | trait Foo {} LL | trait Foo {}
| ^^^^^^^^^ | ^^^^^^^^^
note: required by a bound in `takes_foo` note: required by a bound in `takes_foo`
--> $DIR/multiple_notes.rs:8:22 --> $DIR/multiple_notes.rs:9:22
| |
LL | fn takes_foo(_: impl Foo) {} LL | fn takes_foo(_: impl Foo) {}
| ^^^ required by this bound in `takes_foo` | ^^^ required by this bound in `takes_foo`
error[E0277]: Bar error[E0277]: Bar
--> $DIR/multiple_notes.rs:14:15 --> $DIR/multiple_notes.rs:15:15
| |
LL | takes_bar(()); LL | takes_bar(());
| --------- ^^ Foo | --------- ^^ Foo
@ -32,12 +32,12 @@ LL | takes_bar(());
= note: Baz = note: Baz
= note: Baz2 = note: Baz2
help: this trait has no implementations, consider adding one help: this trait has no implementations, consider adding one
--> $DIR/multiple_notes.rs:6:1 --> $DIR/multiple_notes.rs:7:1
| |
LL | trait Bar {} LL | trait Bar {}
| ^^^^^^^^^ | ^^^^^^^^^
note: required by a bound in `takes_bar` note: required by a bound in `takes_bar`
--> $DIR/multiple_notes.rs:9:22 --> $DIR/multiple_notes.rs:10:22
| |
LL | fn takes_bar(_: impl Bar) {} LL | fn takes_bar(_: impl Bar) {}
| ^^^ required by this bound in `takes_bar` | ^^^ required by this bound in `takes_bar`

View file

@ -1,3 +1,5 @@
//@ reference: attributes.diagnostic.on_unimplemented.intro
//@ reference: attributes.diagnostic.on_unimplemented.keys
#[diagnostic::on_unimplemented(message = "Foo", label = "Bar", note = "Baz")] #[diagnostic::on_unimplemented(message = "Foo", label = "Bar", note = "Baz")]
trait Foo {} trait Foo {}

View file

@ -1,5 +1,5 @@
error[E0277]: Foo error[E0277]: Foo
--> $DIR/on_unimplemented_simple.rs:7:15 --> $DIR/on_unimplemented_simple.rs:9:15
| |
LL | takes_foo(()); LL | takes_foo(());
| --------- ^^ Bar | --------- ^^ Bar
@ -9,12 +9,12 @@ LL | takes_foo(());
= help: the trait `Foo` is not implemented for `()` = help: the trait `Foo` is not implemented for `()`
= note: Baz = note: Baz
help: this trait has no implementations, consider adding one help: this trait has no implementations, consider adding one
--> $DIR/on_unimplemented_simple.rs:2:1 --> $DIR/on_unimplemented_simple.rs:4:1
| |
LL | trait Foo {} LL | trait Foo {}
| ^^^^^^^^^ | ^^^^^^^^^
note: required by a bound in `takes_foo` note: required by a bound in `takes_foo`
--> $DIR/on_unimplemented_simple.rs:4:22 --> $DIR/on_unimplemented_simple.rs:6:22
| |
LL | fn takes_foo(_: impl Foo) {} LL | fn takes_foo(_: impl Foo) {}
| ^^^ required by this bound in `takes_foo` | ^^^ required by this bound in `takes_foo`

View file

@ -1,3 +1,4 @@
//@ reference: attributes.diagnostic.on_unimplemented.repetition
#[diagnostic::on_unimplemented( #[diagnostic::on_unimplemented(
message = "first message", message = "first message",
label = "first label", label = "first label",

View file

@ -1,5 +1,5 @@
warning: `message` is ignored due to previous definition of `message` warning: `message` is ignored due to previous definition of `message`
--> $DIR/report_warning_on_duplicated_options.rs:7:5 --> $DIR/report_warning_on_duplicated_options.rs:8:5
| |
LL | message = "first message", LL | message = "first message",
| ------------------------- `message` is first declared here | ------------------------- `message` is first declared here
@ -10,7 +10,7 @@ LL | message = "second message",
= note: `#[warn(unknown_or_malformed_diagnostic_attributes)]` on by default = note: `#[warn(unknown_or_malformed_diagnostic_attributes)]` on by default
warning: `label` is ignored due to previous definition of `label` warning: `label` is ignored due to previous definition of `label`
--> $DIR/report_warning_on_duplicated_options.rs:10:5 --> $DIR/report_warning_on_duplicated_options.rs:11:5
| |
LL | label = "first label", LL | label = "first label",
| --------------------- `label` is first declared here | --------------------- `label` is first declared here
@ -19,7 +19,7 @@ LL | label = "second label",
| ^^^^^^^^^^^^^^^^^^^^^^ `label` is already declared here | ^^^^^^^^^^^^^^^^^^^^^^ `label` is already declared here
warning: `message` is ignored due to previous definition of `message` warning: `message` is ignored due to previous definition of `message`
--> $DIR/report_warning_on_duplicated_options.rs:7:5 --> $DIR/report_warning_on_duplicated_options.rs:8:5
| |
LL | message = "first message", LL | message = "first message",
| ------------------------- `message` is first declared here | ------------------------- `message` is first declared here
@ -30,7 +30,7 @@ LL | message = "second message",
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no` = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
warning: `label` is ignored due to previous definition of `label` warning: `label` is ignored due to previous definition of `label`
--> $DIR/report_warning_on_duplicated_options.rs:10:5 --> $DIR/report_warning_on_duplicated_options.rs:11:5
| |
LL | label = "first label", LL | label = "first label",
| --------------------- `label` is first declared here | --------------------- `label` is first declared here
@ -41,7 +41,7 @@ LL | label = "second label",
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no` = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
error[E0277]: first message error[E0277]: first message
--> $DIR/report_warning_on_duplicated_options.rs:21:15 --> $DIR/report_warning_on_duplicated_options.rs:22:15
| |
LL | takes_foo(()); LL | takes_foo(());
| --------- ^^ first label | --------- ^^ first label
@ -52,12 +52,12 @@ LL | takes_foo(());
= note: custom note = note: custom note
= note: second note = note: second note
help: this trait has no implementations, consider adding one help: this trait has no implementations, consider adding one
--> $DIR/report_warning_on_duplicated_options.rs:15:1 --> $DIR/report_warning_on_duplicated_options.rs:16:1
| |
LL | trait Foo {} LL | trait Foo {}
| ^^^^^^^^^ | ^^^^^^^^^
note: required by a bound in `takes_foo` note: required by a bound in `takes_foo`
--> $DIR/report_warning_on_duplicated_options.rs:18:22 --> $DIR/report_warning_on_duplicated_options.rs:19:22
| |
LL | fn takes_foo(_: impl Foo) {} LL | fn takes_foo(_: impl Foo) {}
| ^^^ required by this bound in `takes_foo` | ^^^ required by this bound in `takes_foo`

View file

@ -1,3 +1,4 @@
//@ reference: attributes.diagnostic.namespace.unknown-invalid-syntax
#![deny(unknown_or_malformed_diagnostic_attributes)] #![deny(unknown_or_malformed_diagnostic_attributes)]
#[diagnostic::onunimplemented] #[diagnostic::onunimplemented]

View file

@ -1,11 +1,11 @@
error: unknown diagnostic attribute error: unknown diagnostic attribute
--> $DIR/suggest_typos.rs:3:15 --> $DIR/suggest_typos.rs:4:15
| |
LL | #[diagnostic::onunimplemented] LL | #[diagnostic::onunimplemented]
| ^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^
| |
note: the lint level is defined here note: the lint level is defined here
--> $DIR/suggest_typos.rs:1:9 --> $DIR/suggest_typos.rs:2:9
| |
LL | #![deny(unknown_or_malformed_diagnostic_attributes)] LL | #![deny(unknown_or_malformed_diagnostic_attributes)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -15,7 +15,7 @@ LL | #[diagnostic::on_unimplemented]
| ~~~~~~~~~~~~~~~~ | ~~~~~~~~~~~~~~~~
error: unknown diagnostic attribute error: unknown diagnostic attribute
--> $DIR/suggest_typos.rs:8:15 --> $DIR/suggest_typos.rs:9:15
| |
LL | #[diagnostic::un_onimplemented] LL | #[diagnostic::un_onimplemented]
| ^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^
@ -26,7 +26,7 @@ LL | #[diagnostic::on_unimplemented]
| ~~~~~~~~~~~~~~~~ | ~~~~~~~~~~~~~~~~
error: unknown diagnostic attribute error: unknown diagnostic attribute
--> $DIR/suggest_typos.rs:13:15 --> $DIR/suggest_typos.rs:14:15
| |
LL | #[diagnostic::on_implemented] LL | #[diagnostic::on_implemented]
| ^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^

View file

@ -1,3 +1,5 @@
//@ reference: attributes.diagnostic.on_unimplemented.intro
#![feature(negative_bounds)] #![feature(negative_bounds)]
#[diagnostic::on_unimplemented(message = "this ain't fooing")] #[diagnostic::on_unimplemented(message = "this ain't fooing")]

View file

@ -1,5 +1,5 @@
error[E0277]: the trait bound `NotFoo: !Foo` is not satisfied error[E0277]: the trait bound `NotFoo: !Foo` is not satisfied
--> $DIR/on-unimplemented.rs:7:15 --> $DIR/on-unimplemented.rs:9:15
| |
LL | fn hello() -> impl !Foo { LL | fn hello() -> impl !Foo {
| ^^^^^^^^^ the trait bound `NotFoo: !Foo` is not satisfied | ^^^^^^^^^ the trait bound `NotFoo: !Foo` is not satisfied