Skip to content

Commit

Permalink
Emit an error for invalid use of the #[no_sanitize] attribute
Browse files Browse the repository at this point in the history
  • Loading branch information
s7tya committed Aug 2, 2024
1 parent 5367673 commit d8b2b20
Show file tree
Hide file tree
Showing 3 changed files with 95 additions and 0 deletions.
6 changes: 6 additions & 0 deletions compiler/rustc_passes/src/check_attr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,7 @@ impl<'tcx> CheckAttrVisitor<'tcx> {
[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] => {
Expand Down Expand Up @@ -395,6 +396,11 @@ impl<'tcx> CheckAttrVisitor<'tcx> {
}
}

/// 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,
Expand Down
34 changes: 34 additions & 0 deletions tests/ui/attributes/no-sanitize.rs
Original file line number Diff line number Diff line change
@@ -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 changes: 55 additions & 0 deletions tests/ui/attributes/no-sanitize.stderr
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit d8b2b20

Please sign in to comment.