1
Fork 0

Don't mark ineffective_unstable_trait_impl as an internal lint

It's not an internal lint:
- It's not in the rustc::internal lint group
- It's on unconditionally, because it actually lints `staged_api`, not
  the compiler

This fixes a bug where `#[deny(rustc::internal)]` would warn that
`rustc::internal` was an unknown lint.
This commit is contained in:
Joshua Nelson 2021-01-15 15:21:20 -05:00
parent 5053db7c00
commit c819a4c025
4 changed files with 30 additions and 7 deletions

View file

@ -4,7 +4,7 @@
//! compiler code, rather than using their own custom pass. Those //! compiler code, rather than using their own custom pass. Those
//! lints are all available in `rustc_lint::builtin`. //! lints are all available in `rustc_lint::builtin`.
use crate::{declare_lint, declare_lint_pass, declare_tool_lint}; use crate::{declare_lint, declare_lint_pass};
use rustc_span::edition::Edition; use rustc_span::edition::Edition;
use rustc_span::symbol::sym; use rustc_span::symbol::sym;
@ -2825,8 +2825,29 @@ declare_lint! {
}; };
} }
declare_tool_lint! { declare_lint! {
pub rustc::INEFFECTIVE_UNSTABLE_TRAIT_IMPL, /// The `ineffective_unstable_trait_impl` lint detects `#[unstable]` attributes which are not used.
///
/// ### Example
///
/// ```compile_fail
/// #![feature(staged_api)]
///
/// #[derive(Clone)]
/// #[stable(feature = "x", since = "1")]
/// struct S {}
///
/// #[unstable(feature = "y", issue = "none")]
/// impl Copy for S {}
/// ```
///
/// {{produces}}
///
/// ### Explanation
///
/// `staged_api` does not currently support using a stability attribute on `impl` blocks.
/// `impl`s are always stable if both the type and trait are stable, and always unstable otherwise.
pub INEFFECTIVE_UNSTABLE_TRAIT_IMPL,
Deny, Deny,
"detects `#[unstable]` on stable trait implementations for stable types" "detects `#[unstable]` on stable trait implementations for stable types"
} }

View file

@ -33,7 +33,8 @@ pub trait Wake {
} }
} }
#[allow(rustc::ineffective_unstable_trait_impl)] #[cfg_attr(bootstrap, allow(rustc::ineffective_unstable_trait_impl))]
#[cfg_attr(not(bootstrap), allow(ineffective_unstable_trait_impl))]
#[unstable(feature = "wake_trait", issue = "69912")] #[unstable(feature = "wake_trait", issue = "69912")]
impl<W: Wake + Send + Sync + 'static> From<Arc<W>> for Waker { impl<W: Wake + Send + Sync + 'static> From<Arc<W>> for Waker {
fn from(waker: Arc<W>) -> Waker { fn from(waker: Arc<W>) -> Waker {
@ -43,7 +44,8 @@ impl<W: Wake + Send + Sync + 'static> From<Arc<W>> for Waker {
} }
} }
#[allow(rustc::ineffective_unstable_trait_impl)] #[cfg_attr(bootstrap, allow(rustc::ineffective_unstable_trait_impl))]
#[cfg_attr(not(bootstrap), allow(ineffective_unstable_trait_impl))]
#[unstable(feature = "wake_trait", issue = "69912")] #[unstable(feature = "wake_trait", issue = "69912")]
impl<W: Wake + Send + Sync + 'static> From<Arc<W>> for RawWaker { impl<W: Wake + Send + Sync + 'static> From<Arc<W>> for RawWaker {
fn from(waker: Arc<W>) -> RawWaker { fn from(waker: Arc<W>) -> RawWaker {

View file

@ -22,7 +22,7 @@ impl StableTrait for UnstableType {}
impl UnstableTrait for StableType {} impl UnstableTrait for StableType {}
#[unstable(feature = "x", issue = "none")] #[unstable(feature = "x", issue = "none")]
//~^ ERROR an `#[unstable]` annotation here has no effect [rustc::ineffective_unstable_trait_impl] //~^ ERROR an `#[unstable]` annotation here has no effect [ineffective_unstable_trait_impl]
impl StableTrait for StableType {} impl StableTrait for StableType {}
fn main() {} fn main() {}

View file

@ -4,7 +4,7 @@ error: an `#[unstable]` annotation here has no effect
LL | #[unstable(feature = "x", issue = "none")] LL | #[unstable(feature = "x", issue = "none")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
= note: `#[deny(rustc::ineffective_unstable_trait_impl)]` on by default = note: `#[deny(ineffective_unstable_trait_impl)]` on by default
= note: see issue #55436 <https://github.com/rust-lang/rust/issues/55436> for more information = note: see issue #55436 <https://github.com/rust-lang/rust/issues/55436> for more information
error: aborting due to previous error error: aborting due to previous error