-
Notifications
You must be signed in to change notification settings - Fork 13.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Emit weird lint name lints after expansion
Previously, we were emitting weird name lints (for renamed or unknown lints) before expansion, most importantly before cfg expansion. This meant that the weird name lints would not fire for lint attributes hidden inside cfg_attr. The same applied for lint level specifications of those lints. By moving the lints for the lint names to the post-expansion phase, these issues are resolved.
- Loading branch information
Showing
7 changed files
with
212 additions
and
47 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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() {} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters