From 97a7e38db7eb0643a6334aba30077622d09e5c85 Mon Sep 17 00:00:00 2001 From: Jorge Aparicio Date: Tue, 18 Jul 2017 20:03:22 -0500 Subject: tasks / idle have exclusive access to Threshold, but do not own the token --- tests/cfail/local-token.rs | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 tests/cfail/local-token.rs (limited to 'tests/cfail/local-token.rs') diff --git a/tests/cfail/local-token.rs b/tests/cfail/local-token.rs new file mode 100644 index 0000000..4c98956 --- /dev/null +++ b/tests/cfail/local-token.rs @@ -0,0 +1,44 @@ +#![deny(warnings)] +#![feature(const_fn)] +#![feature(proc_macro)] + +#[macro_use(task)] +extern crate cortex_m_rtfm as rtfm; +extern crate stm32f103xx; + +use rtfm::{app, Threshold}; + +app! { + device: stm32f103xx, + + tasks: { + EXTI0: { + enabled: true, + priority: 1, + }, + } +} + +fn init(_p: init::Peripherals) {} + +fn idle() -> ! { + loop {} +} + +task!(EXTI0, exti0, Old { + token: Option = None; +}); + +fn exti0(nt: &mut Threshold, old: &mut Old, _r: EXTI0::Resources) { + if let Some(ot) = old.token.take() { + let _: (Threshold, Threshold) = (*nt, ot); + //~^ error cannot move out of borrowed content + + return + } + + // ERROR can't store a threshold token in a local variable, otherwise you + // would end up with two threshold tokens in a task (see `if let` above) + old.token = Some(*nt); + //~^ error cannot move out of borrowed content +} -- cgit v1.2.3