Skip to content

Make weird name lints trigger behind cfg_attr #97266

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
May 25, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 17 additions & 17 deletions compiler/rustc_lint/src/early.rs
Original file line number Diff line number Diff line change
Expand Up @@ -424,10 +424,25 @@ pub fn check_ast_node<'a>(
let mut passes: Vec<_> = passes.iter().map(|p| (p)()).collect();
let mut buffered = lint_buffer.unwrap_or_default();

if !sess.opts.debugging_opts.no_interleave_lints {
if sess.opts.debugging_opts.no_interleave_lints {
for (i, pass) in passes.iter_mut().enumerate() {
buffered =
sess.prof.extra_verbose_generic_activity("run_lint", pass.name()).run(|| {
early_lint_node(
sess,
!pre_expansion && i == 0,
lint_store,
registered_tools,
buffered,
EarlyLintPassObjects { lints: slice::from_mut(pass) },
check_node,
)
});
}
} else {
buffered = early_lint_node(
sess,
pre_expansion,
!pre_expansion,
lint_store,
registered_tools,
buffered,
Expand All @@ -446,21 +461,6 @@ pub fn check_ast_node<'a>(
check_node,
);
}
} else {
for (i, pass) in passes.iter_mut().enumerate() {
buffered =
sess.prof.extra_verbose_generic_activity("run_lint", pass.name()).run(|| {
early_lint_node(
sess,
pre_expansion && i == 0,
lint_store,
registered_tools,
buffered,
EarlyLintPassObjects { lints: slice::from_mut(pass) },
check_node,
)
});
}
}

// All of the buffered lints should have been emitted at this point.
Expand Down
2 changes: 1 addition & 1 deletion compiler/rustc_lint_defs/src/builtin.rs
Original file line number Diff line number Diff line change
Expand Up @@ -474,7 +474,7 @@ declare_lint! {
}

declare_lint! {
/// The `unknown_lints` lint detects unrecognized lint attribute.
/// The `unknown_lints` lint detects unrecognized lint attributes.
///
/// ### Example
///
Expand Down
16 changes: 8 additions & 8 deletions src/test/ui-fulldeps/lint-tool-test.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,6 @@ warning: lint name `test_group` is deprecated and may not have an effect in the
LL | #[allow(test_group)]
| ^^^^^^^^^^ help: change it to: `clippy::test_group`

warning: unknown lint: `this_lint_does_not_exist`
--> $DIR/lint-tool-test.rs:36:8
|
LL | #[deny(this_lint_does_not_exist)]
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: `#[warn(unknown_lints)]` on by default

warning: lint name `test_lint` is deprecated and may not have an effect in the future.
--> $DIR/lint-tool-test.rs:9:23
|
Expand All @@ -44,6 +36,14 @@ warning: lint name `test_group` is deprecated and may not have an effect in the
LL | #[allow(test_group)]
| ^^^^^^^^^^ help: change it to: `clippy::test_group`

warning: unknown lint: `this_lint_does_not_exist`
--> $DIR/lint-tool-test.rs:36:8
|
LL | #[deny(this_lint_does_not_exist)]
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: `#[warn(unknown_lints)]` on by default

warning: use of deprecated attribute `plugin`: compiler plugins are deprecated. See https://github.com/rust-lang/rust/pull/64675
--> $DIR/lint-tool-test.rs:6:1
|
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,17 @@
warning: `#[macro_escape]` is a deprecated synonym for `#[macro_use]`
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:401:17
|
LL | mod inner { #![macro_escape] }
| ^^^^^^^^^^^^^^^^
|
= help: try an outer attribute: `#[macro_use]`

warning: `#[macro_escape]` is a deprecated synonym for `#[macro_use]`
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:398:1
|
LL | #[macro_escape]
| ^^^^^^^^^^^^^^^

warning: unknown lint: `x5400`
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:46:9
|
Expand Down Expand Up @@ -172,20 +186,6 @@ warning: unknown lint: `x5100`
LL | #[deny(x5100)] impl S { }
| ^^^^^

warning: `#[macro_escape]` is a deprecated synonym for `#[macro_use]`
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:401:17
|
LL | mod inner { #![macro_escape] }
| ^^^^^^^^^^^^^^^^
|
= help: try an outer attribute: `#[macro_use]`

warning: `#[macro_escape]` is a deprecated synonym for `#[macro_use]`
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:398:1
|
LL | #[macro_escape]
| ^^^^^^^^^^^^^^^

warning: use of deprecated attribute `crate_id`: no longer used.
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:85:1
|
Expand Down
53 changes: 53 additions & 0 deletions src/test/ui/lint/issue-97094.interleaved.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
error: unknown lint: `nonex_lint_top_level`
--> $DIR/issue-97094.rs:14:26
|
LL | #![cfg_attr(all(), allow(nonex_lint_top_level))]
| ^^^^^^^^^^^^^^^^^^^^
|
note: the lint level is defined here
--> $DIR/issue-97094.rs:10:9
|
LL | #![deny(warnings)]
| ^^^^^^^^
= note: `#[deny(unknown_lints)]` implied by `#[deny(warnings)]`

error: lint `bare_trait_object` has been renamed to `bare_trait_objects`
--> $DIR/issue-97094.rs:16:26
|
LL | #![cfg_attr(all(), allow(bare_trait_object))]
| ^^^^^^^^^^^^^^^^^ help: use the new name: `bare_trait_objects`
|
= note: `#[deny(renamed_and_removed_lints)]` implied by `#[deny(warnings)]`

error: unknown lint: `nonex_lint_mod`
--> $DIR/issue-97094.rs:19:25
|
LL | #[cfg_attr(all(), allow(nonex_lint_mod))]
| ^^^^^^^^^^^^^^

error: unknown lint: `nonex_lint_mod_inner`
--> $DIR/issue-97094.rs:22:30
|
LL | #![cfg_attr(all(), allow(nonex_lint_mod_inner))]
| ^^^^^^^^^^^^^^^^^^^^

error: unknown lint: `nonex_lint_fn`
--> $DIR/issue-97094.rs:26:25
|
LL | #[cfg_attr(all(), allow(nonex_lint_fn))]
| ^^^^^^^^^^^^^

error: unknown lint: `nonex_lint_in_macro`
--> $DIR/issue-97094.rs:37:29
|
LL | #[cfg_attr(all(), allow(nonex_lint_in_macro))]
| ^^^^^^^^^^^^^^^^^^^

error: unknown lint: `nonex_lint_fn`
--> $DIR/issue-97094.rs:56:13
|
LL | #[allow(nonex_lint_fn)]
| ^^^^^^^^^^^^^

error: aborting due to 7 previous errors

53 changes: 53 additions & 0 deletions src/test/ui/lint/issue-97094.nointerleaved.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
error: unknown lint: `nonex_lint_top_level`
--> $DIR/issue-97094.rs:14:26
|
LL | #![cfg_attr(all(), allow(nonex_lint_top_level))]
| ^^^^^^^^^^^^^^^^^^^^
|
note: the lint level is defined here
--> $DIR/issue-97094.rs:10:9
|
LL | #![deny(warnings)]
| ^^^^^^^^
= note: `#[deny(unknown_lints)]` implied by `#[deny(warnings)]`

error: lint `bare_trait_object` has been renamed to `bare_trait_objects`
--> $DIR/issue-97094.rs:16:26
|
LL | #![cfg_attr(all(), allow(bare_trait_object))]
| ^^^^^^^^^^^^^^^^^ help: use the new name: `bare_trait_objects`
|
= note: `#[deny(renamed_and_removed_lints)]` implied by `#[deny(warnings)]`

error: unknown lint: `nonex_lint_mod`
--> $DIR/issue-97094.rs:19:25
|
LL | #[cfg_attr(all(), allow(nonex_lint_mod))]
| ^^^^^^^^^^^^^^

error: unknown lint: `nonex_lint_mod_inner`
--> $DIR/issue-97094.rs:22:30
|
LL | #![cfg_attr(all(), allow(nonex_lint_mod_inner))]
| ^^^^^^^^^^^^^^^^^^^^

error: unknown lint: `nonex_lint_fn`
--> $DIR/issue-97094.rs:26:25
|
LL | #[cfg_attr(all(), allow(nonex_lint_fn))]
| ^^^^^^^^^^^^^

error: unknown lint: `nonex_lint_in_macro`
--> $DIR/issue-97094.rs:37:29
|
LL | #[cfg_attr(all(), allow(nonex_lint_in_macro))]
| ^^^^^^^^^^^^^^^^^^^

error: unknown lint: `nonex_lint_fn`
--> $DIR/issue-97094.rs:56:13
|
LL | #[allow(nonex_lint_fn)]
| ^^^^^^^^^^^^^

error: aborting due to 7 previous errors

59 changes: 59 additions & 0 deletions src/test/ui/lint/issue-97094.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
// revisions: interleaved nointerleaved
// [nointerleaved]compile-flags: -Z no-interleave-lints

// This test has two revisions because the logic change
// needed to make this test pass had to be adjusted
// for no-interleave-lints. Should the debug option
// be removed one day, please don't remove this
// test entirely, just remove the revision from it.

#![deny(warnings)]

// Ensure that unknown lints inside cfg-attr's are linted for

#![cfg_attr(all(), allow(nonex_lint_top_level))]
//~^ ERROR unknown lint
#![cfg_attr(all(), allow(bare_trait_object))]
//~^ ERROR has been renamed

#[cfg_attr(all(), allow(nonex_lint_mod))]
//~^ ERROR unknown lint
mod baz {
#![cfg_attr(all(), allow(nonex_lint_mod_inner))]
//~^ ERROR unknown lint
}

#[cfg_attr(all(), allow(nonex_lint_fn))]
//~^ ERROR unknown lint
pub fn main() {}

macro_rules! bar {
($($t:tt)*) => {
$($t)*
};
}

bar!(
#[cfg_attr(all(), allow(nonex_lint_in_macro))]
//~^ ERROR unknown lint
pub fn _bar() {}
);

// No warning for non-applying cfg
#[cfg_attr(any(), allow(nonex_lint_fn))]
pub fn _foo() {}

// Allowing unknown lints works if inside cfg_attr
#[cfg_attr(all(), allow(unknown_lints))]
mod bar_allowed {
#[allow(nonex_lint_fn)]
fn _foo() {}
}

// ... but not if the cfg_attr doesn't evaluate
#[cfg_attr(any(), allow(unknown_lints))]
mod bar_not_allowed {
#[allow(nonex_lint_fn)]
//~^ ERROR unknown lint
fn _foo() {}
}
16 changes: 8 additions & 8 deletions src/test/ui/lint/reasons-erroneous.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -58,14 +58,6 @@ error[E0452]: malformed lint attribute input
LL | #![warn(keyword_idents, reason = "root in rubble", macro_use_extern_crate)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^ reason in lint attribute must come last

warning: unknown lint: `reason`
--> $DIR/reasons-erroneous.rs:50:39
|
LL | #![warn(missing_copy_implementations, reason)]
| ^^^^^^
|
= note: `#[warn(unknown_lints)]` on by default

error[E0452]: malformed lint attribute input
--> $DIR/reasons-erroneous.rs:3:58
|
Expand Down Expand Up @@ -126,6 +118,14 @@ error[E0452]: malformed lint attribute input
LL | #![warn(keyword_idents, reason = "root in rubble", macro_use_extern_crate)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^ reason in lint attribute must come last

warning: unknown lint: `reason`
--> $DIR/reasons-erroneous.rs:50:39
|
LL | #![warn(missing_copy_implementations, reason)]
| ^^^^^^
|
= note: `#[warn(unknown_lints)]` on by default

error: aborting due to 20 previous errors; 1 warning emitted

For more information about this error, try `rustc --explain E0452`.