summaryrefslogtreecommitdiffstats
path: root/tests/ui/diagnostic_namespace
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/diagnostic_namespace')
-rw-r--r--tests/ui/diagnostic_namespace/on_unimplemented/do_not_accept_options_of_the_internal_rustc_attribute.rs67
-rw-r--r--tests/ui/diagnostic_namespace/on_unimplemented/do_not_accept_options_of_the_internal_rustc_attribute.stderr305
-rw-r--r--tests/ui/diagnostic_namespace/on_unimplemented/do_not_fail_parsing_on_invalid_options_1.rs8
-rw-r--r--tests/ui/diagnostic_namespace/on_unimplemented/do_not_fail_parsing_on_invalid_options_1.stderr54
-rw-r--r--tests/ui/diagnostic_namespace/on_unimplemented/feature-gate-diagnostic_on_unimplemented.stderr2
-rw-r--r--tests/ui/diagnostic_namespace/on_unimplemented/ignore_unsupported_options_and_continue_to_use_fallback.rs2
-rw-r--r--tests/ui/diagnostic_namespace/on_unimplemented/ignore_unsupported_options_and_continue_to_use_fallback.stderr28
-rw-r--r--tests/ui/diagnostic_namespace/on_unimplemented/on_unimplemented_simple.stderr2
-rw-r--r--tests/ui/diagnostic_namespace/on_unimplemented/report_warning_on_duplicated_options.rs25
-rw-r--r--tests/ui/diagnostic_namespace/on_unimplemented/report_warning_on_duplicated_options.stderr67
-rw-r--r--tests/ui/diagnostic_namespace/requires_path.stderr2
11 files changed, 546 insertions, 16 deletions
diff --git a/tests/ui/diagnostic_namespace/on_unimplemented/do_not_accept_options_of_the_internal_rustc_attribute.rs b/tests/ui/diagnostic_namespace/on_unimplemented/do_not_accept_options_of_the_internal_rustc_attribute.rs
new file mode 100644
index 000000000..eb985c062
--- /dev/null
+++ b/tests/ui/diagnostic_namespace/on_unimplemented/do_not_accept_options_of_the_internal_rustc_attribute.rs
@@ -0,0 +1,67 @@
+#![feature(diagnostic_namespace)]
+
+#[diagnostic::on_unimplemented(
+ on(_Self = "&str"),
+ //~^WARN malformed `on_unimplemented` attribute
+ //~|WARN malformed `on_unimplemented` attribute
+ message = "trait has `{Self}` and `{T}` as params",
+ label = "trait has `{Self}` and `{T}` as params",
+ note = "trait has `{Self}` and `{T}` as params",
+ parent_label = "in this scope",
+ //~^WARN malformed `on_unimplemented` attribute
+ //~|WARN malformed `on_unimplemented` attribute
+ append_const_msg
+ //~^WARN malformed `on_unimplemented` attribute
+ //~|WARN malformed `on_unimplemented` attribute
+)]
+trait Foo<T> {}
+
+#[diagnostic::on_unimplemented = "Message"]
+//~^WARN malformed `on_unimplemented` attribute
+//~|WARN malformed `on_unimplemented` attribute
+trait Bar {}
+
+#[diagnostic::on_unimplemented(message = "Not allowed to apply it on a impl")]
+//~^WARN #[diagnostic::on_unimplemented]` can only be applied to trait definitions
+impl Bar for i32 {}
+
+// cannot use special rustc_on_unimplement symbols
+// in the format string
+#[diagnostic::on_unimplemented(
+ message = "{from_desugaring}{direct}{cause}{integral}{integer}",
+ //~^WARN there is no parameter `from_desugaring` on trait `Baz`
+ //~|WARN there is no parameter `from_desugaring` on trait `Baz`
+ //~|WARN there is no parameter `direct` on trait `Baz`
+ //~|WARN there is no parameter `direct` on trait `Baz`
+ //~|WARN there is no parameter `cause` on trait `Baz`
+ //~|WARN there is no parameter `cause` on trait `Baz`
+ //~|WARN there is no parameter `integral` on trait `Baz`
+ //~|WARN there is no parameter `integral` on trait `Baz`
+ //~|WARN there is no parameter `integer` on trait `Baz`
+ //~|WARN there is no parameter `integer` on trait `Baz`
+ label = "{float}{_Self}{crate_local}{Trait}{ItemContext}"
+ //~^WARN there is no parameter `float` on trait `Baz`
+ //~|WARN there is no parameter `float` on trait `Baz`
+ //~|WARN there is no parameter `_Self` on trait `Baz`
+ //~|WARN there is no parameter `_Self` on trait `Baz`
+ //~|WARN there is no parameter `crate_local` on trait `Baz`
+ //~|WARN there is no parameter `crate_local` on trait `Baz`
+ //~|WARN there is no parameter `Trait` on trait `Baz`
+ //~|WARN there is no parameter `Trait` on trait `Baz`
+ //~|WARN there is no parameter `ItemContext` on trait `Baz`
+ //~|WARN there is no parameter `ItemContext` on trait `Baz`
+)]
+trait Baz {}
+
+fn takes_foo(_: impl Foo<i32>) {}
+fn takes_bar(_: impl Bar) {}
+fn takes_baz(_: impl Baz) {}
+
+fn main() {
+ takes_foo(());
+ //~^ERROR trait has `()` and `i32` as params
+ takes_bar(());
+ //~^ERROR the trait bound `(): Bar` is not satisfied
+ takes_baz(());
+ //~^ERROR {from_desugaring}{direct}{cause}{integral}{integer}
+}
diff --git a/tests/ui/diagnostic_namespace/on_unimplemented/do_not_accept_options_of_the_internal_rustc_attribute.stderr b/tests/ui/diagnostic_namespace/on_unimplemented/do_not_accept_options_of_the_internal_rustc_attribute.stderr
new file mode 100644
index 000000000..75a701f0b
--- /dev/null
+++ b/tests/ui/diagnostic_namespace/on_unimplemented/do_not_accept_options_of_the_internal_rustc_attribute.stderr
@@ -0,0 +1,305 @@
+warning: `#[diagnostic::on_unimplemented]` can only be applied to trait definitions
+ --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:24:1
+ |
+LL | #[diagnostic::on_unimplemented(message = "Not allowed to apply it on a impl")]
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: `#[warn(unknown_or_malformed_diagnostic_attributes)]` on by default
+
+warning: malformed `on_unimplemented` attribute
+ --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:4:5
+ |
+LL | on(_Self = "&str"),
+ | ^^^^^^^^^^^^^^^^^^ invalid option found here
+ |
+ = help: only `message`, `note` and `label` are allowed as options
+
+warning: malformed `on_unimplemented` attribute
+ --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:10:5
+ |
+LL | parent_label = "in this scope",
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ invalid option found here
+ |
+ = help: only `message`, `note` and `label` are allowed as options
+
+warning: malformed `on_unimplemented` attribute
+ --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:13:5
+ |
+LL | append_const_msg
+ | ^^^^^^^^^^^^^^^^ invalid option found here
+ |
+ = help: only `message`, `note` and `label` are allowed as options
+
+warning: malformed `on_unimplemented` attribute
+ --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:19:32
+ |
+LL | #[diagnostic::on_unimplemented = "Message"]
+ | ^^^^^^^^^^^ invalid option found here
+ |
+ = help: only `message`, `note` and `label` are allowed as options
+
+warning: there is no parameter `from_desugaring` on trait `Baz`
+ --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:31:5
+ |
+LL | message = "{from_desugaring}{direct}{cause}{integral}{integer}",
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = help: expect either a generic argument name or `{Self}` as format argument
+
+warning: there is no parameter `direct` on trait `Baz`
+ --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:31:5
+ |
+LL | message = "{from_desugaring}{direct}{cause}{integral}{integer}",
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = help: expect either a generic argument name or `{Self}` as format argument
+
+warning: there is no parameter `cause` on trait `Baz`
+ --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:31:5
+ |
+LL | message = "{from_desugaring}{direct}{cause}{integral}{integer}",
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = help: expect either a generic argument name or `{Self}` as format argument
+
+warning: there is no parameter `integral` on trait `Baz`
+ --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:31:5
+ |
+LL | message = "{from_desugaring}{direct}{cause}{integral}{integer}",
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = help: expect either a generic argument name or `{Self}` as format argument
+
+warning: there is no parameter `integer` on trait `Baz`
+ --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:31:5
+ |
+LL | message = "{from_desugaring}{direct}{cause}{integral}{integer}",
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = help: expect either a generic argument name or `{Self}` as format argument
+
+warning: there is no parameter `float` on trait `Baz`
+ --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:42:5
+ |
+LL | label = "{float}{_Self}{crate_local}{Trait}{ItemContext}"
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = help: expect either a generic argument name or `{Self}` as format argument
+
+warning: there is no parameter `_Self` on trait `Baz`
+ --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:42:5
+ |
+LL | label = "{float}{_Self}{crate_local}{Trait}{ItemContext}"
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = help: expect either a generic argument name or `{Self}` as format argument
+
+warning: there is no parameter `crate_local` on trait `Baz`
+ --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:42:5
+ |
+LL | label = "{float}{_Self}{crate_local}{Trait}{ItemContext}"
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = help: expect either a generic argument name or `{Self}` as format argument
+
+warning: there is no parameter `Trait` on trait `Baz`
+ --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:42:5
+ |
+LL | label = "{float}{_Self}{crate_local}{Trait}{ItemContext}"
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = help: expect either a generic argument name or `{Self}` as format argument
+
+warning: there is no parameter `ItemContext` on trait `Baz`
+ --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:42:5
+ |
+LL | label = "{float}{_Self}{crate_local}{Trait}{ItemContext}"
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = help: expect either a generic argument name or `{Self}` as format argument
+
+warning: malformed `on_unimplemented` attribute
+ --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:4:5
+ |
+LL | on(_Self = "&str"),
+ | ^^^^^^^^^^^^^^^^^^ invalid option found here
+ |
+ = help: only `message`, `note` and `label` are allowed as options
+ = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+
+warning: malformed `on_unimplemented` attribute
+ --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:10:5
+ |
+LL | parent_label = "in this scope",
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ invalid option found here
+ |
+ = help: only `message`, `note` and `label` are allowed as options
+ = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+
+warning: malformed `on_unimplemented` attribute
+ --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:13:5
+ |
+LL | append_const_msg
+ | ^^^^^^^^^^^^^^^^ invalid option found here
+ |
+ = help: only `message`, `note` and `label` are allowed as options
+ = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+
+error[E0277]: trait has `()` and `i32` as params
+ --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:61:15
+ |
+LL | takes_foo(());
+ | --------- ^^ trait has `()` and `i32` as params
+ | |
+ | required by a bound introduced by this call
+ |
+ = help: the trait `Foo<i32>` is not implemented for `()`
+ = note: trait has `()` and `i32` as params
+help: this trait has no implementations, consider adding one
+ --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:17:1
+ |
+LL | trait Foo<T> {}
+ | ^^^^^^^^^^^^
+note: required by a bound in `takes_foo`
+ --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:56:22
+ |
+LL | fn takes_foo(_: impl Foo<i32>) {}
+ | ^^^^^^^^ required by this bound in `takes_foo`
+
+warning: malformed `on_unimplemented` attribute
+ --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:19:32
+ |
+LL | #[diagnostic::on_unimplemented = "Message"]
+ | ^^^^^^^^^^^ invalid option found here
+ |
+ = help: only `message`, `note` and `label` are allowed as options
+ = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+
+error[E0277]: the trait bound `(): Bar` is not satisfied
+ --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:63:15
+ |
+LL | takes_bar(());
+ | --------- ^^ the trait `Bar` is not implemented for `()`
+ | |
+ | required by a bound introduced by this call
+ |
+ = help: the trait `Bar` is implemented for `i32`
+note: required by a bound in `takes_bar`
+ --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:57:22
+ |
+LL | fn takes_bar(_: impl Bar) {}
+ | ^^^ required by this bound in `takes_bar`
+
+warning: there is no parameter `from_desugaring` on trait `Baz`
+ --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:31:5
+ |
+LL | message = "{from_desugaring}{direct}{cause}{integral}{integer}",
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = help: expect either a generic argument name or `{Self}` as format argument
+ = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+
+warning: there is no parameter `direct` on trait `Baz`
+ --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:31:5
+ |
+LL | message = "{from_desugaring}{direct}{cause}{integral}{integer}",
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = help: expect either a generic argument name or `{Self}` as format argument
+ = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+
+warning: there is no parameter `cause` on trait `Baz`
+ --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:31:5
+ |
+LL | message = "{from_desugaring}{direct}{cause}{integral}{integer}",
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = help: expect either a generic argument name or `{Self}` as format argument
+ = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+
+warning: there is no parameter `integral` on trait `Baz`
+ --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:31:5
+ |
+LL | message = "{from_desugaring}{direct}{cause}{integral}{integer}",
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = help: expect either a generic argument name or `{Self}` as format argument
+ = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+
+warning: there is no parameter `integer` on trait `Baz`
+ --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:31:5
+ |
+LL | message = "{from_desugaring}{direct}{cause}{integral}{integer}",
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = help: expect either a generic argument name or `{Self}` as format argument
+ = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+
+warning: there is no parameter `float` on trait `Baz`
+ --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:42:5
+ |
+LL | label = "{float}{_Self}{crate_local}{Trait}{ItemContext}"
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = help: expect either a generic argument name or `{Self}` as format argument
+ = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+
+warning: there is no parameter `_Self` on trait `Baz`
+ --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:42:5
+ |
+LL | label = "{float}{_Self}{crate_local}{Trait}{ItemContext}"
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = help: expect either a generic argument name or `{Self}` as format argument
+ = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+
+warning: there is no parameter `crate_local` on trait `Baz`
+ --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:42:5
+ |
+LL | label = "{float}{_Self}{crate_local}{Trait}{ItemContext}"
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = help: expect either a generic argument name or `{Self}` as format argument
+ = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+
+warning: there is no parameter `Trait` on trait `Baz`
+ --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:42:5
+ |
+LL | label = "{float}{_Self}{crate_local}{Trait}{ItemContext}"
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = help: expect either a generic argument name or `{Self}` as format argument
+ = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+
+warning: there is no parameter `ItemContext` on trait `Baz`
+ --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:42:5
+ |
+LL | label = "{float}{_Self}{crate_local}{Trait}{ItemContext}"
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = help: expect either a generic argument name or `{Self}` as format argument
+ = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+
+error[E0277]: {from_desugaring}{direct}{cause}{integral}{integer}
+ --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:65:15
+ |
+LL | takes_baz(());
+ | --------- ^^ {float}{_Self}{crate_local}{Trait}{ItemContext}
+ | |
+ | required by a bound introduced by this call
+ |
+ = help: the trait `Baz` is not implemented for `()`
+help: this trait has no implementations, consider adding one
+ --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:54:1
+ |
+LL | trait Baz {}
+ | ^^^^^^^^^
+note: required by a bound in `takes_baz`
+ --> $DIR/do_not_accept_options_of_the_internal_rustc_attribute.rs:58:22
+ |
+LL | fn takes_baz(_: impl Baz) {}
+ | ^^^ required by this bound in `takes_baz`
+
+error: aborting due to 3 previous errors; 29 warnings emitted
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/diagnostic_namespace/on_unimplemented/do_not_fail_parsing_on_invalid_options_1.rs b/tests/ui/diagnostic_namespace/on_unimplemented/do_not_fail_parsing_on_invalid_options_1.rs
index 346d8373f..12fe98817 100644
--- a/tests/ui/diagnostic_namespace/on_unimplemented/do_not_fail_parsing_on_invalid_options_1.rs
+++ b/tests/ui/diagnostic_namespace/on_unimplemented/do_not_fail_parsing_on_invalid_options_1.rs
@@ -28,10 +28,16 @@ trait Doom {}
//~|WARN missing options for `on_unimplemented` attribute
trait Whatever {}
+#[diagnostic::on_unimplemented(message = "{DoesNotExist}")]
+//~^WARN there is no parameter `DoesNotExist` on trait `Test`
+//~|WARN there is no parameter `DoesNotExist` on trait `Test`
+trait Test {}
+
fn take_foo(_: impl Foo) {}
fn take_baz(_: impl Baz) {}
fn take_boom(_: impl Boom) {}
fn take_whatever(_: impl Whatever) {}
+fn take_test(_: impl Test) {}
fn main() {
take_foo(1_i32);
@@ -42,4 +48,6 @@ fn main() {
//~^ERROR Boom
take_whatever(1_i32);
//~^ERROR the trait bound `i32: Whatever` is not satisfied
+ take_test(());
+ //~^ERROR {DoesNotExist}
}
diff --git a/tests/ui/diagnostic_namespace/on_unimplemented/do_not_fail_parsing_on_invalid_options_1.stderr b/tests/ui/diagnostic_namespace/on_unimplemented/do_not_fail_parsing_on_invalid_options_1.stderr
index 162ddd79f..11263580b 100644
--- a/tests/ui/diagnostic_namespace/on_unimplemented/do_not_fail_parsing_on_invalid_options_1.stderr
+++ b/tests/ui/diagnostic_namespace/on_unimplemented/do_not_fail_parsing_on_invalid_options_1.stderr
@@ -46,6 +46,14 @@ LL | #[diagnostic::on_unimplemented]
|
= help: at least one of the `message`, `note` and `label` options are expected
+warning: there is no parameter `DoesNotExist` on trait `Test`
+ --> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:31:32
+ |
+LL | #[diagnostic::on_unimplemented(message = "{DoesNotExist}")]
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = help: expect either a generic argument name or `{Self}` as format argument
+
warning: malformed `on_unimplemented` attribute
--> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:3:32
|
@@ -56,7 +64,7 @@ LL | #[diagnostic::on_unimplemented(unsupported = "foo")]
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
error[E0277]: the trait bound `i32: Foo` is not satisfied
- --> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:37:14
+ --> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:43:14
|
LL | take_foo(1_i32);
| -------- ^^^^^ the trait `Foo` is not implemented for `i32`
@@ -69,7 +77,7 @@ help: this trait has no implementations, consider adding one
LL | trait Foo {}
| ^^^^^^^^^
note: required by a bound in `take_foo`
- --> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:31:21
+ --> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:36:21
|
LL | fn take_foo(_: impl Foo) {}
| ^^^ required by this bound in `take_foo`
@@ -84,7 +92,7 @@ LL | #[diagnostic::on_unimplemented(message = "Boom", unsupported = "Bar")]
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
error[E0277]: Boom
- --> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:39:14
+ --> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:45:14
|
LL | take_baz(1_i32);
| -------- ^^^^^ the trait `Baz` is not implemented for `i32`
@@ -97,7 +105,7 @@ help: this trait has no implementations, consider adding one
LL | trait Baz {}
| ^^^^^^^^^
note: required by a bound in `take_baz`
- --> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:32:21
+ --> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:37:21
|
LL | fn take_baz(_: impl Baz) {}
| ^^^ required by this bound in `take_baz`
@@ -112,7 +120,7 @@ LL | #[diagnostic::on_unimplemented(message = "Boom", on(_Self = "i32", message
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
error[E0277]: Boom
- --> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:41:15
+ --> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:47:15
|
LL | take_boom(1_i32);
| --------- ^^^^^ the trait `Boom` is not implemented for `i32`
@@ -125,7 +133,7 @@ help: this trait has no implementations, consider adding one
LL | trait Boom {}
| ^^^^^^^^^^
note: required by a bound in `take_boom`
- --> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:33:22
+ --> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:38:22
|
LL | fn take_boom(_: impl Boom) {}
| ^^^^ required by this bound in `take_boom`
@@ -140,7 +148,7 @@ LL | #[diagnostic::on_unimplemented]
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
error[E0277]: the trait bound `i32: Whatever` is not satisfied
- --> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:43:19
+ --> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:49:19
|
LL | take_whatever(1_i32);
| ------------- ^^^^^ the trait `Whatever` is not implemented for `i32`
@@ -153,11 +161,39 @@ help: this trait has no implementations, consider adding one
LL | trait Whatever {}
| ^^^^^^^^^^^^^^
note: required by a bound in `take_whatever`
- --> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:34:26
+ --> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:39:26
|
LL | fn take_whatever(_: impl Whatever) {}
| ^^^^^^^^ required by this bound in `take_whatever`
-error: aborting due to 4 previous errors; 10 warnings emitted
+warning: there is no parameter `DoesNotExist` on trait `Test`
+ --> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:31:32
+ |
+LL | #[diagnostic::on_unimplemented(message = "{DoesNotExist}")]
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = help: expect either a generic argument name or `{Self}` as format argument
+ = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+
+error[E0277]: {DoesNotExist}
+ --> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:51:15
+ |
+LL | take_test(());
+ | --------- ^^ the trait `Test` is not implemented for `()`
+ | |
+ | required by a bound introduced by this call
+ |
+help: this trait has no implementations, consider adding one
+ --> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:34:1
+ |
+LL | trait Test {}
+ | ^^^^^^^^^^
+note: required by a bound in `take_test`
+ --> $DIR/do_not_fail_parsing_on_invalid_options_1.rs:40:22
+ |
+LL | fn take_test(_: impl Test) {}
+ | ^^^^ required by this bound in `take_test`
+
+error: aborting due to 5 previous errors; 12 warnings emitted
For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/diagnostic_namespace/on_unimplemented/feature-gate-diagnostic_on_unimplemented.stderr b/tests/ui/diagnostic_namespace/on_unimplemented/feature-gate-diagnostic_on_unimplemented.stderr
index 21f02e3a7..82e3b709f 100644
--- a/tests/ui/diagnostic_namespace/on_unimplemented/feature-gate-diagnostic_on_unimplemented.stderr
+++ b/tests/ui/diagnostic_namespace/on_unimplemented/feature-gate-diagnostic_on_unimplemented.stderr
@@ -7,6 +7,6 @@ LL | #[diagnostic::on_unimplemented(message = "Foo")]
= note: see issue #111996 <https://github.com/rust-lang/rust/issues/111996> for more information
= help: add `#![feature(diagnostic_namespace)]` to the crate attributes to enable
-error: aborting due to previous error
+error: aborting due to 1 previous error
For more information about this error, try `rustc --explain E0658`.
diff --git a/tests/ui/diagnostic_namespace/on_unimplemented/ignore_unsupported_options_and_continue_to_use_fallback.rs b/tests/ui/diagnostic_namespace/on_unimplemented/ignore_unsupported_options_and_continue_to_use_fallback.rs
index 8410b3eb1..0893f29c4 100644
--- a/tests/ui/diagnostic_namespace/on_unimplemented/ignore_unsupported_options_and_continue_to_use_fallback.rs
+++ b/tests/ui/diagnostic_namespace/on_unimplemented/ignore_unsupported_options_and_continue_to_use_fallback.rs
@@ -8,6 +8,8 @@
note = "custom note"
)]
#[diagnostic::on_unimplemented(message = "fallback!!")]
+//~^ `message` is ignored due to previous definition of `message`
+//~| `message` is ignored due to previous definition of `message`
#[diagnostic::on_unimplemented(label = "fallback label")]
#[diagnostic::on_unimplemented(note = "fallback note")]
trait Foo {}
diff --git a/tests/ui/diagnostic_namespace/on_unimplemented/ignore_unsupported_options_and_continue_to_use_fallback.stderr b/tests/ui/diagnostic_namespace/on_unimplemented/ignore_unsupported_options_and_continue_to_use_fallback.stderr
index 906472beb..e00846da7 100644
--- a/tests/ui/diagnostic_namespace/on_unimplemented/ignore_unsupported_options_and_continue_to_use_fallback.stderr
+++ b/tests/ui/diagnostic_namespace/on_unimplemented/ignore_unsupported_options_and_continue_to_use_fallback.stderr
@@ -7,6 +7,15 @@ LL | if(Self = "()"),
= help: only `message`, `note` and `label` are allowed as options
= note: `#[warn(unknown_or_malformed_diagnostic_attributes)]` on by default
+warning: `message` is ignored due to previous definition of `message`
+ --> $DIR/ignore_unsupported_options_and_continue_to_use_fallback.rs:10:32
+ |
+LL | message = "custom message",
+ | -------------------------- `message` is first declared here
+...
+LL | #[diagnostic::on_unimplemented(message = "fallback!!")]
+ | ^^^^^^^^^^^^^^^^^^^^^^ `message` is already declared here
+
warning: malformed `on_unimplemented` attribute
--> $DIR/ignore_unsupported_options_and_continue_to_use_fallback.rs:4:5
|
@@ -16,8 +25,19 @@ LL | if(Self = "()"),
= help: only `message`, `note` and `label` are allowed as options
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+warning: `message` is ignored due to previous definition of `message`
+ --> $DIR/ignore_unsupported_options_and_continue_to_use_fallback.rs:10:32
+ |
+LL | message = "custom message",
+ | -------------------------- `message` is first declared here
+...
+LL | #[diagnostic::on_unimplemented(message = "fallback!!")]
+ | ^^^^^^^^^^^^^^^^^^^^^^ `message` is already declared here
+ |
+ = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+
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(());
| --------- ^^ fallback label
@@ -28,16 +48,16 @@ LL | takes_foo(());
= note: custom note
= note: fallback note
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 {}
| ^^^^^^^^^
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) {}
| ^^^ required by this bound in `takes_foo`
-error: aborting due to previous error; 2 warnings emitted
+error: aborting due to 1 previous error; 4 warnings emitted
For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/diagnostic_namespace/on_unimplemented/on_unimplemented_simple.stderr b/tests/ui/diagnostic_namespace/on_unimplemented/on_unimplemented_simple.stderr
index 549c7caa7..de57f7044 100644
--- a/tests/ui/diagnostic_namespace/on_unimplemented/on_unimplemented_simple.stderr
+++ b/tests/ui/diagnostic_namespace/on_unimplemented/on_unimplemented_simple.stderr
@@ -19,6 +19,6 @@ note: required by a bound in `takes_foo`
LL | fn takes_foo(_: impl Foo) {}
| ^^^ required by this bound in `takes_foo`
-error: aborting due to previous error
+error: aborting due to 1 previous error
For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/diagnostic_namespace/on_unimplemented/report_warning_on_duplicated_options.rs b/tests/ui/diagnostic_namespace/on_unimplemented/report_warning_on_duplicated_options.rs
new file mode 100644
index 000000000..a7becd2f8
--- /dev/null
+++ b/tests/ui/diagnostic_namespace/on_unimplemented/report_warning_on_duplicated_options.rs
@@ -0,0 +1,25 @@
+#![feature(diagnostic_namespace)]
+
+#[diagnostic::on_unimplemented(
+ message = "first message",
+ label = "first label",
+ note = "custom note"
+)]
+#[diagnostic::on_unimplemented(
+ message = "second message",
+ //~^WARN `message` is ignored due to previous definition of `message`
+ //~|WARN `message` is ignored due to previous definition of `message`
+ label = "second label",
+ //~^WARN `label` is ignored due to previous definition of `label`
+ //~|WARN `label` is ignored due to previous definition of `label`
+ note = "second note"
+)]
+trait Foo {}
+
+
+fn takes_foo(_: impl Foo) {}
+
+fn main() {
+ takes_foo(());
+ //~^ERROR first message
+}
diff --git a/tests/ui/diagnostic_namespace/on_unimplemented/report_warning_on_duplicated_options.stderr b/tests/ui/diagnostic_namespace/on_unimplemented/report_warning_on_duplicated_options.stderr
new file mode 100644
index 000000000..d30754dcf
--- /dev/null
+++ b/tests/ui/diagnostic_namespace/on_unimplemented/report_warning_on_duplicated_options.stderr
@@ -0,0 +1,67 @@
+warning: `message` is ignored due to previous definition of `message`
+ --> $DIR/report_warning_on_duplicated_options.rs:9:5
+ |
+LL | message = "first message",
+ | ------------------------- `message` is first declared here
+...
+LL | message = "second message",
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^ `message` is already declared here
+ |
+ = note: `#[warn(unknown_or_malformed_diagnostic_attributes)]` on by default
+
+warning: `label` is ignored due to previous definition of `label`
+ --> $DIR/report_warning_on_duplicated_options.rs:12:5
+ |
+LL | label = "first label",
+ | --------------------- `label` is first declared here
+...
+LL | label = "second label",
+ | ^^^^^^^^^^^^^^^^^^^^^^ `label` is already declared here
+
+warning: `message` is ignored due to previous definition of `message`
+ --> $DIR/report_warning_on_duplicated_options.rs:9:5
+ |
+LL | message = "first message",
+ | ------------------------- `message` is first declared here
+...
+LL | message = "second message",
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^ `message` is already declared here
+ |
+ = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+
+warning: `label` is ignored due to previous definition of `label`
+ --> $DIR/report_warning_on_duplicated_options.rs:12:5
+ |
+LL | label = "first label",
+ | --------------------- `label` is first declared here
+...
+LL | label = "second label",
+ | ^^^^^^^^^^^^^^^^^^^^^^ `label` is already declared here
+ |
+ = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+
+error[E0277]: first message
+ --> $DIR/report_warning_on_duplicated_options.rs:23:15
+ |
+LL | takes_foo(());
+ | --------- ^^ first label
+ | |
+ | required by a bound introduced by this call
+ |
+ = help: the trait `Foo` is not implemented for `()`
+ = note: custom note
+ = note: second note
+help: this trait has no implementations, consider adding one
+ --> $DIR/report_warning_on_duplicated_options.rs:17:1
+ |
+LL | trait Foo {}
+ | ^^^^^^^^^
+note: required by a bound in `takes_foo`
+ --> $DIR/report_warning_on_duplicated_options.rs:20:22
+ |
+LL | fn takes_foo(_: impl Foo) {}
+ | ^^^ required by this bound in `takes_foo`
+
+error: aborting due to 1 previous error; 4 warnings emitted
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/diagnostic_namespace/requires_path.stderr b/tests/ui/diagnostic_namespace/requires_path.stderr
index ce867621d..5d07d3a22 100644
--- a/tests/ui/diagnostic_namespace/requires_path.stderr
+++ b/tests/ui/diagnostic_namespace/requires_path.stderr
@@ -4,5 +4,5 @@ error: cannot find attribute `diagnostic` in this scope
LL | #[diagnostic]
| ^^^^^^^^^^
-error: aborting due to previous error
+error: aborting due to 1 previous error