-
Notifications
You must be signed in to change notification settings - Fork 13.6k
Description
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:
rust/compiler/rustc_passes/src/stability.rs
Lines 763 to 764 in 3dcb616
// 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
:
Lines 605 to 609 in 3dcb616
impl Error for Infallible { | |
fn description(&self) -> &str { | |
match *self {} | |
} | |
} |
That's because in all other cases, we have #[allow(deprecated)]
there:
Lines 597 to 602 in 3dcb616
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?