diff options
| author | Tomasz Miąsko <tomasz.miasko@gmail.com> | 2020-11-24 00:00:00 +0000 |
|---|---|---|
| committer | Tomasz Miąsko <tomasz.miasko@gmail.com> | 2020-11-24 00:00:00 +0000 |
| commit | 75e00e8cf40faafbe8a19d2f35df66c0ca681bcb (patch) | |
| tree | 298e54204ee336bb9cdb9da75ba37548053696c4 /src | |
| parent | bdc1d9774b7f963e87c3ca1946e00a44d5bdbfe5 (diff) | |
| download | rust-75e00e8cf40faafbe8a19d2f35df66c0ca681bcb.tar.gz rust-75e00e8cf40faafbe8a19d2f35df66c0ca681bcb.zip | |
Validate that `#[naked]` is applied to a function definition
Diffstat (limited to 'src')
| -rw-r--r-- | src/test/ui/asm/naked-invalid-attr.rs | 51 | ||||
| -rw-r--r-- | src/test/ui/asm/naked-invalid-attr.stderr | 42 | ||||
| -rw-r--r-- | src/test/ui/rfc-2091-track-caller/error-with-naked.rs | 6 | ||||
| -rw-r--r-- | src/test/ui/rfc-2091-track-caller/error-with-naked.stderr | 8 |
4 files changed, 94 insertions, 13 deletions
diff --git a/src/test/ui/asm/naked-invalid-attr.rs b/src/test/ui/asm/naked-invalid-attr.rs new file mode 100644 index 00000000000..cdb6c17454b --- /dev/null +++ b/src/test/ui/asm/naked-invalid-attr.rs @@ -0,0 +1,51 @@ +// Checks that #[naked] attribute can be placed on function definitions only. +// +// ignore-wasm32 asm unsupported +#![feature(asm)] +#![feature(naked_functions)] +#![naked] //~ ERROR should be applied to a function definition + +extern "C" { + #[naked] //~ ERROR should be applied to a function definition + fn f(); +} + +#[naked] //~ ERROR should be applied to a function definition +#[repr(C)] +struct S { + a: u32, + b: u32, +} + +trait Invoke { + #[naked] //~ ERROR should be applied to a function definition + extern "C" fn invoke(&self); +} + +impl Invoke for S { + #[naked] + extern "C" fn invoke(&self) { + unsafe { asm!("", options(noreturn)) } + } +} + +#[naked] +extern "C" fn ok() { + unsafe { asm!("", options(noreturn)) } +} + +impl S { + #[naked] + extern "C" fn g() { + unsafe { asm!("", options(noreturn)) } + } + + #[naked] + extern "C" fn h(&self) { + unsafe { asm!("", options(noreturn)) } + } +} + +fn main() { + #[naked] || {}; //~ ERROR should be applied to a function definition +} diff --git a/src/test/ui/asm/naked-invalid-attr.stderr b/src/test/ui/asm/naked-invalid-attr.stderr new file mode 100644 index 00000000000..beaa34140c9 --- /dev/null +++ b/src/test/ui/asm/naked-invalid-attr.stderr @@ -0,0 +1,42 @@ +error: attribute should be applied to a function definition + --> $DIR/naked-invalid-attr.rs:9:5 + | +LL | #[naked] + | ^^^^^^^^ +LL | fn f(); + | ------- not a function definition + +error: attribute should be applied to a function definition + --> $DIR/naked-invalid-attr.rs:13:1 + | +LL | #[naked] + | ^^^^^^^^ +LL | #[repr(C)] +LL | / struct S { +LL | | a: u32, +LL | | b: u32, +LL | | } + | |_- not a function definition + +error: attribute should be applied to a function definition + --> $DIR/naked-invalid-attr.rs:50:5 + | +LL | #[naked] || {}; + | ^^^^^^^^ ----- not a function definition + +error: attribute should be applied to a function definition + --> $DIR/naked-invalid-attr.rs:21:5 + | +LL | #[naked] + | ^^^^^^^^ +LL | extern "C" fn invoke(&self); + | ---------------------------- not a function definition + +error: attribute should be applied to a function definition + --> $DIR/naked-invalid-attr.rs:6:1 + | +LL | #![naked] + | ^^^^^^^^^ + +error: aborting due to 5 previous errors + diff --git a/src/test/ui/rfc-2091-track-caller/error-with-naked.rs b/src/test/ui/rfc-2091-track-caller/error-with-naked.rs index 2b110c9a325..c60ff7dc934 100644 --- a/src/test/ui/rfc-2091-track-caller/error-with-naked.rs +++ b/src/test/ui/rfc-2091-track-caller/error-with-naked.rs @@ -12,10 +12,4 @@ impl S { fn g() {} } -extern "Rust" { - #[track_caller] //~ ERROR cannot use `#[track_caller]` with `#[naked]` - #[naked] - fn h(); -} - fn main() {} diff --git a/src/test/ui/rfc-2091-track-caller/error-with-naked.stderr b/src/test/ui/rfc-2091-track-caller/error-with-naked.stderr index 1249d1df071..211cd3f16ba 100644 --- a/src/test/ui/rfc-2091-track-caller/error-with-naked.stderr +++ b/src/test/ui/rfc-2091-track-caller/error-with-naked.stderr @@ -5,17 +5,11 @@ LL | #[track_caller] | ^^^^^^^^^^^^^^^ error[E0736]: cannot use `#[track_caller]` with `#[naked]` - --> $DIR/error-with-naked.rs:16:5 - | -LL | #[track_caller] - | ^^^^^^^^^^^^^^^ - -error[E0736]: cannot use `#[track_caller]` with `#[naked]` --> $DIR/error-with-naked.rs:10:5 | LL | #[track_caller] | ^^^^^^^^^^^^^^^ -error: aborting due to 3 previous errors +error: aborting due to 2 previous errors For more information about this error, try `rustc --explain E0736`. |
