aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorJorge Aparicio <jorge@japaric.io>2017-07-23 22:11:07 -0500
committerJorge Aparicio <jorge@japaric.io>2017-07-23 22:18:44 -0500
commit4139b47d4bb63f997ccd6890e61677b073071344 (patch)
tree6eeb7d915587596b24efe5f2eb014b1a523499da /tests
parent749ce810d5525dbbe3c7b2750a9413203112ccf3 (diff)
add cfail test: borrow can't escape critical sections
Diffstat (limited to 'tests')
-rw-r--r--tests/cfail/critical-section.rs50
1 files changed, 50 insertions, 0 deletions
diff --git a/tests/cfail/critical-section.rs b/tests/cfail/critical-section.rs
new file mode 100644
index 0000000..3c8f0a9
--- /dev/null
+++ b/tests/cfail/critical-section.rs
@@ -0,0 +1,50 @@
+#![deny(warnings)]
+#![feature(const_fn)]
+#![feature(proc_macro)]
+#![no_std]
+
+#[macro_use(task)]
+extern crate cortex_m_rtfm as rtfm;
+extern crate stm32f103xx;
+
+use rtfm::{app, Resource, Threshold};
+
+app! {
+ device: stm32f103xx,
+
+ resources: {
+ static STATE: bool = false;
+ },
+
+ idle: {
+ resources: [STATE],
+ },
+
+ tasks: {
+ EXTI0: {
+ enabled: true,
+ priority: 1,
+ resources: [STATE],
+ },
+ },
+}
+
+fn init(_p: init::Peripherals, _r: init::Resources) {}
+
+fn idle(t: &mut Threshold, r: idle::Resources) -> ! {
+ let state = rtfm::atomic(|cs| {
+ // ERROR borrow can't escape this *global* critical section
+ r.STATE.borrow(cs) //~ error cannot infer an appropriate lifetime
+ });
+
+ let state = r.STATE.claim(t, |state, _t| {
+ // ERROR borrow can't escape this critical section
+ state //~ error cannot infer an appropriate lifetime
+ });
+
+ loop {}
+}
+
+task!(EXTI0, exti0);
+
+fn exti0(_t: &mut Threshold, _r: EXTI0::Resources) {}