forked from rust-lang/rust
-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Auto merge of rust-lang#105605 - inquisitivecrystal:attr-validation, …
…r=cjgillot Don't perform invalid checks in `codegen_attrs` The attributes `#[track_caller]` and `#[cmse_nonsecure_entry]` are only valid on functions. When validating one of these attributes, codegen_attrs previously called `fn_sig`, [which can only be used on functions](rust-lang#105201), on the item the attribute was attached to, assuming that the item was a function without checking. This led to [ICEs in situations where the attribute was incorrectly used on non-functions](rust-lang#105594). With this change, we skip calling `fn_sig` if the item the attribute is attached to must be a function but isn't, because `check_attr` will reject such cases without codegen_attrs's intervention. As a side note, some of the attributes in codegen_attrs are only valid on functions, but that property isn't actually checked. I'm planning to fix that in a follow up PR since it's a behavior change that will need to be validated rather than an obvious bugfix. Thankfully, all the attributes like that I've found so far are unstable. Fixes rust-lang#105594. r? `@cjgillot`
- Loading branch information
Showing
3 changed files
with
62 additions
and
2 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
13 changes: 13 additions & 0 deletions
13
src/test/ui/attributes/issue-105594-invalid-attr-validation.rs
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,13 @@ | ||
// This checks that the attribute validation ICE in issue #105594 doesn't | ||
// recur. | ||
// | ||
// ignore-thumbv8m.base | ||
#![feature(cmse_nonsecure_entry)] | ||
|
||
fn main() {} | ||
|
||
#[track_caller] //~ ERROR attribute should be applied to a function | ||
static _A: () = (); | ||
|
||
#[cmse_nonsecure_entry] //~ ERROR attribute should be applied to a function | ||
static _B: () = (); //~| ERROR #[cmse_nonsecure_entry]` is only valid for targets |
26 changes: 26 additions & 0 deletions
26
src/test/ui/attributes/issue-105594-invalid-attr-validation.stderr
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,26 @@ | ||
error[E0739]: attribute should be applied to a function definition | ||
--> $DIR/issue-105594-invalid-attr-validation.rs:9:1 | ||
| | ||
LL | #[track_caller] | ||
| ^^^^^^^^^^^^^^^ | ||
LL | static _A: () = (); | ||
| ------------------- not a function definition | ||
|
||
error: attribute should be applied to a function definition | ||
--> $DIR/issue-105594-invalid-attr-validation.rs:12:1 | ||
| | ||
LL | #[cmse_nonsecure_entry] | ||
| ^^^^^^^^^^^^^^^^^^^^^^^ | ||
LL | static _B: () = (); | ||
| ------------------- not a function definition | ||
|
||
error[E0775]: `#[cmse_nonsecure_entry]` is only valid for targets with the TrustZone-M extension | ||
--> $DIR/issue-105594-invalid-attr-validation.rs:12:1 | ||
| | ||
LL | #[cmse_nonsecure_entry] | ||
| ^^^^^^^^^^^^^^^^^^^^^^^ | ||
|
||
error: aborting due to 3 previous errors | ||
|
||
Some errors have detailed explanations: E0739, E0775. | ||
For more information about an error, try `rustc --explain E0739`. |