Auto merge of #124683 - estebank:issue-124651, r=compiler-errors
Do not ICE on foreign malformed `diagnostic::on_unimplemented` Fix #124651.
This commit is contained in:
commit
a60f077c38
@ -499,12 +499,14 @@ impl<'tcx> OnUnimplementedDirective {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if is_diagnostic_namespace_variant {
|
if is_diagnostic_namespace_variant {
|
||||||
tcx.emit_node_span_lint(
|
if let Some(def_id) = item_def_id.as_local() {
|
||||||
UNKNOWN_OR_MALFORMED_DIAGNOSTIC_ATTRIBUTES,
|
tcx.emit_node_span_lint(
|
||||||
tcx.local_def_id_to_hir_id(item_def_id.expect_local()),
|
UNKNOWN_OR_MALFORMED_DIAGNOSTIC_ATTRIBUTES,
|
||||||
vec![item.span()],
|
tcx.local_def_id_to_hir_id(def_id),
|
||||||
MalformedOnUnimplementedAttrLint::new(item.span()),
|
vec![item.span()],
|
||||||
);
|
MalformedOnUnimplementedAttrLint::new(item.span()),
|
||||||
|
);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// nothing found
|
// nothing found
|
||||||
tcx.dcx().emit_err(NoValueInOnUnimplemented { span: item.span() });
|
tcx.dcx().emit_err(NoValueInOnUnimplemented { span: item.span() });
|
||||||
|
@ -0,0 +1,2 @@
|
|||||||
|
#[diagnostic::on_unimplemented(aa = "broken")]
|
||||||
|
pub trait Test {}
|
17
tests/ui/diagnostic_namespace/on_unimplemented_ice.rs
Normal file
17
tests/ui/diagnostic_namespace/on_unimplemented_ice.rs
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
//@ edition:2021
|
||||||
|
//@ compile-flags:--test
|
||||||
|
//@ aux-build:bad_on_unimplemented.rs
|
||||||
|
|
||||||
|
// Do not ICE when encountering a malformed `#[diagnostic::on_unimplemented]` annotation in a
|
||||||
|
// dependency when incorrectly used (#124651).
|
||||||
|
|
||||||
|
extern crate bad_on_unimplemented;
|
||||||
|
|
||||||
|
use bad_on_unimplemented::Test;
|
||||||
|
|
||||||
|
fn breakage<T: Test>(_: T) {}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test() {
|
||||||
|
breakage(1); //~ ERROR E0277
|
||||||
|
}
|
17
tests/ui/diagnostic_namespace/on_unimplemented_ice.stderr
Normal file
17
tests/ui/diagnostic_namespace/on_unimplemented_ice.stderr
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
error[E0277]: the trait bound `{integer}: Test` is not satisfied
|
||||||
|
--> $DIR/on_unimplemented_ice.rs:16:14
|
||||||
|
|
|
||||||
|
LL | breakage(1);
|
||||||
|
| -------- ^ the trait `Test` is not implemented for `{integer}`
|
||||||
|
| |
|
||||||
|
| required by a bound introduced by this call
|
||||||
|
|
|
||||||
|
note: required by a bound in `breakage`
|
||||||
|
--> $DIR/on_unimplemented_ice.rs:12:16
|
||||||
|
|
|
||||||
|
LL | fn breakage<T: Test>(_: T) {}
|
||||||
|
| ^^^^ required by this bound in `breakage`
|
||||||
|
|
||||||
|
error: aborting due to 1 previous error
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0277`.
|
Loading…
x
Reference in New Issue
Block a user