diff options
author | 2018-09-17 22:52:01 +0000 | |
---|---|---|
committer | 2018-09-17 22:52:01 +0000 | |
commit | 98ce8a1f5d30e3c5c421c0e9c19c078cea7c0473 (patch) | |
tree | 9f2f8e03f77a604b3669c26232873b3c527f2f61 /cortex-m-rt/examples | |
parent | 403d8881ac3be806b519dedf107f6038d220bb59 (diff) | |
parent | 8385882be93fd4ba4e20ea0a812766cdc1a74c33 (diff) | |
download | cortex-m-98ce8a1f5d30e3c5c421c0e9c19c078cea7c0473.tar.gz cortex-m-98ce8a1f5d30e3c5c421c0e9c19c078cea7c0473.tar.zst cortex-m-98ce8a1f5d30e3c5c421c0e9c19c078cea7c0473.zip |
Merge #123
123: respect declared unsafety r=therealprof a=japaric
the `#[entry]` and `#[exception]` attributes ignored the declared unsafety and
always expanded to a safe function. This caused the following valid code to
error at compile time:
``` rust
#[entry]
unsafe fn main() -> ! {
foo();
//~^ ERROR call to unsafe function is unsafe and requires unsafe function or block
loop {}
}
unsafe fn foo() {}
```
r? @rust-embedded/cortex-m (anyone)
Co-authored-by: Jorge Aparicio <jorge@japaric.io>
Diffstat (limited to 'cortex-m-rt/examples')
-rw-r--r-- | cortex-m-rt/examples/unsafety.rs | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/cortex-m-rt/examples/unsafety.rs b/cortex-m-rt/examples/unsafety.rs new file mode 100644 index 0000000..a9f0234 --- /dev/null +++ b/cortex-m-rt/examples/unsafety.rs @@ -0,0 +1,36 @@ +//! Checks that the declared unsafety is respected by the attributes + +#![deny(warnings)] +#![no_main] +#![no_std] + +extern crate cortex_m_rt; +extern crate panic_semihosting; + +use cortex_m_rt::{entry, exception, ExceptionFrame}; + +#[entry] +unsafe fn main() -> ! { + foo(); + + loop {} +} + +#[exception] +unsafe fn DefaultHandler(_irqn: i16) { + foo(); +} + +#[exception] +unsafe fn HardFault(_ef: &ExceptionFrame) -> ! { + foo(); + + loop {} +} + +#[exception] +unsafe fn SysTick() { + foo(); +} + +unsafe fn foo() {} |