Check that #[cmse_nonsecure_entry] is applied to a function definition

This commit is contained in:
Fabian Wolff 2021-06-25 15:36:38 +02:00
parent 117799b73c
commit 499afcdfcf
3 changed files with 40 additions and 0 deletions

View File

@ -97,6 +97,7 @@ impl CheckAttrVisitor<'tcx> {
| sym::rustc_dirty
| sym::rustc_if_this_changed
| sym::rustc_then_this_would_need => self.check_rustc_dirty_clean(&attr),
sym::cmse_nonsecure_entry => self.check_cmse_nonsecure_entry(attr, span, target),
_ => true,
};
// lint-only checks
@ -234,6 +235,25 @@ impl CheckAttrVisitor<'tcx> {
}
}
/// Checks if `#[cmse_nonsecure_entry]` is applied to a function definition.
fn check_cmse_nonsecure_entry(&self, attr: &Attribute, span: &Span, target: Target) -> bool {
match target {
Target::Fn
| Target::Method(MethodKind::Trait { body: true } | MethodKind::Inherent) => true,
_ => {
self.tcx
.sess
.struct_span_err(
attr.span,
"attribute should be applied to a function definition",
)
.span_label(*span, "not a function definition")
.emit();
false
}
}
}
/// Checks if a `#[track_caller]` is applied to a non-naked function. Returns `true` if valid.
fn check_track_caller(
&self,

View File

@ -0,0 +1,9 @@
// Regression test for the ICE described in #83475.
#![crate_type="lib"]
#![feature(cmse_nonsecure_entry)]
#[cmse_nonsecure_entry]
//~^ ERROR: attribute should be applied to a function definition
struct XEmpty2;
//~^ NOTE: not a function definition

View File

@ -0,0 +1,11 @@
error: attribute should be applied to a function definition
--> $DIR/issue-83475.rs:6:1
|
LL | #[cmse_nonsecure_entry]
| ^^^^^^^^^^^^^^^^^^^^^^^
LL |
LL | struct XEmpty2;
| --------------- not a function definition
error: aborting due to previous error