Emit an error for invalid use of the #[no_sanitize]
attribute
This commit is contained in:
parent
4d48a6be74
commit
61ea488309
@ -125,6 +125,7 @@ fn check_attributes(
|
||||
[sym::inline, ..] => self.check_inline(hir_id, attr, span, target),
|
||||
[sym::coverage, ..] => self.check_coverage(attr, span, target),
|
||||
[sym::optimize, ..] => self.check_optimize(hir_id, attr, target),
|
||||
[sym::no_sanitize, ..] => self.check_no_sanitize(hir_id, attr, span, target),
|
||||
[sym::non_exhaustive, ..] => self.check_non_exhaustive(hir_id, attr, span, target),
|
||||
[sym::marker, ..] => self.check_marker(hir_id, attr, span, target),
|
||||
[sym::target_feature, ..] => {
|
||||
@ -255,7 +256,6 @@ fn check_attributes(
|
||||
| sym::may_dangle // FIXME(dropck_eyepatch)
|
||||
| sym::pointee // FIXME(derive_smart_pointer)
|
||||
| sym::linkage // FIXME(linkage)
|
||||
| sym::no_sanitize // FIXME(no_sanitize)
|
||||
| sym::omit_gdb_pretty_printer_section // FIXME(omit_gdb_pretty_printer_section)
|
||||
| sym::used // handled elsewhere to restrict to static items
|
||||
| sym::repr // handled elsewhere to restrict to type decls items
|
||||
@ -450,6 +450,11 @@ fn check_optimize(&self, hir_id: HirId, attr: &Attribute, target: Target) {
|
||||
}
|
||||
}
|
||||
|
||||
/// Checks that `#[no_sanitize(..)]` is applied to a function or method.
|
||||
fn check_no_sanitize(&self, hir_id: HirId, attr: &Attribute, span: Span, target: Target) {
|
||||
self.check_applied_to_fn_or_method(hir_id, attr, span, target)
|
||||
}
|
||||
|
||||
fn check_generic_attr(
|
||||
&self,
|
||||
hir_id: HirId,
|
||||
|
34
tests/ui/attributes/no-sanitize.rs
Normal file
34
tests/ui/attributes/no-sanitize.rs
Normal file
@ -0,0 +1,34 @@
|
||||
#![feature(no_sanitize)]
|
||||
#![feature(stmt_expr_attributes)]
|
||||
#![deny(unused_attributes)]
|
||||
#![allow(dead_code)]
|
||||
|
||||
fn invalid() {
|
||||
#[no_sanitize(memory)] //~ ERROR attribute should be applied to a function definition
|
||||
{
|
||||
1
|
||||
};
|
||||
}
|
||||
|
||||
#[no_sanitize(memory)] //~ ERROR attribute should be applied to a function definition
|
||||
type InvalidTy = ();
|
||||
|
||||
#[no_sanitize(memory)] //~ ERROR attribute should be applied to a function definition
|
||||
mod invalid_module {}
|
||||
|
||||
fn main() {
|
||||
let _ = #[no_sanitize(memory)] //~ ERROR attribute should be applied to a function definition
|
||||
(|| 1);
|
||||
}
|
||||
|
||||
#[no_sanitize(memory)] //~ ERROR attribute should be applied to a function definition
|
||||
struct F;
|
||||
|
||||
#[no_sanitize(memory)] //~ ERROR attribute should be applied to a function definition
|
||||
impl F {
|
||||
#[no_sanitize(memory)]
|
||||
fn valid(&self) {}
|
||||
}
|
||||
|
||||
#[no_sanitize(memory)]
|
||||
fn valid() {}
|
55
tests/ui/attributes/no-sanitize.stderr
Normal file
55
tests/ui/attributes/no-sanitize.stderr
Normal file
@ -0,0 +1,55 @@
|
||||
error: attribute should be applied to a function definition
|
||||
--> $DIR/no-sanitize.rs:7:5
|
||||
|
|
||||
LL | #[no_sanitize(memory)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
LL | / {
|
||||
LL | | 1
|
||||
LL | | };
|
||||
| |_____- not a function definition
|
||||
|
||||
error: attribute should be applied to a function definition
|
||||
--> $DIR/no-sanitize.rs:13:1
|
||||
|
|
||||
LL | #[no_sanitize(memory)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
LL | type InvalidTy = ();
|
||||
| -------------------- not a function definition
|
||||
|
||||
error: attribute should be applied to a function definition
|
||||
--> $DIR/no-sanitize.rs:16:1
|
||||
|
|
||||
LL | #[no_sanitize(memory)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
LL | mod invalid_module {}
|
||||
| --------------------- not a function definition
|
||||
|
||||
error: attribute should be applied to a function definition
|
||||
--> $DIR/no-sanitize.rs:20:13
|
||||
|
|
||||
LL | let _ = #[no_sanitize(memory)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
LL | (|| 1);
|
||||
| ------ not a function definition
|
||||
|
||||
error: attribute should be applied to a function definition
|
||||
--> $DIR/no-sanitize.rs:24:1
|
||||
|
|
||||
LL | #[no_sanitize(memory)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
LL | struct F;
|
||||
| --------- not a function definition
|
||||
|
||||
error: attribute should be applied to a function definition
|
||||
--> $DIR/no-sanitize.rs:27:1
|
||||
|
|
||||
LL | #[no_sanitize(memory)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
LL | / impl F {
|
||||
LL | | #[no_sanitize(memory)]
|
||||
LL | | fn valid(&self) {}
|
||||
LL | | }
|
||||
| |_- not a function definition
|
||||
|
||||
error: aborting due to 6 previous errors
|
||||
|
Loading…
Reference in New Issue
Block a user