This doesn't give any warnings, even though std::error::Error::description is deprecated:
impl std::error::Error for E {
fn description(&self) -> &str {
":)"
}
}
It seems like this is a deliberate decision:
|
// Pass `None` to skip deprecation warnings. |
|
self.tcx.check_stability(def_id, None, impl_item_ref.span, None); |
Substituting that first None for Some(impl_item_ref.id.hir_id()) makes it work.
Doing so results in the lint triggering in exactly one place in std:
|
impl Error for Infallible { |
|
fn description(&self) -> &str { |
|
match *self {} |
|
} |
|
} |
That's because in all other cases, we have #[allow(deprecated)] there:
|
impl Error for string::FromUtf16Error { |
|
#[allow(deprecated)] |
|
fn description(&self) -> &str { |
|
"invalid utf-16" |
|
} |
|
} |
Which is suprising, as that lint doesn't tigger there, making that #[allow] unnecessary.
It seems as if it used to be necessary in the past, but now no longer is.
Did #[deprecated] trigger on overrides in the past? Was that behavior changed on purpose? Or is it a bug that it doesn't do that anymore?
This doesn't give any warnings, even though std::error::Error::description is deprecated:
It seems like this is a deliberate decision:
rust/compiler/rustc_passes/src/stability.rs
Lines 763 to 764 in 3dcb616
Substituting that first
NoneforSome(impl_item_ref.id.hir_id())makes it work.Doing so results in the lint triggering in exactly one place in
std:rust/library/std/src/error.rs
Lines 605 to 609 in 3dcb616
That's because in all other cases, we have
#[allow(deprecated)]there:rust/library/std/src/error.rs
Lines 597 to 602 in 3dcb616
Which is suprising, as that lint doesn't tigger there, making that
#[allow]unnecessary.It seems as if it used to be necessary in the past, but now no longer is.
Did #[deprecated] trigger on overrides in the past? Was that behavior changed on purpose? Or is it a bug that it doesn't do that anymore?