From 4d8d53a20613efc27042c965765588e4c7fce46d Mon Sep 17 00:00:00 2001 From: Jorge Aparicio Date: Fri, 14 Apr 2017 10:18:50 -0500 Subject: add another would-be data race compile fail test --- tests/cfail/race-1.rs | 19 +++++++++++++++++++ tests/cfail/race-2.rs | 22 ++++++++++++++++++++++ tests/cfail/race.rs | 22 ---------------------- 3 files changed, 41 insertions(+), 22 deletions(-) create mode 100644 tests/cfail/race-1.rs create mode 100644 tests/cfail/race-2.rs delete mode 100644 tests/cfail/race.rs diff --git a/tests/cfail/race-1.rs b/tests/cfail/race-1.rs new file mode 100644 index 0000000..cc31ef7 --- /dev/null +++ b/tests/cfail/race-1.rs @@ -0,0 +1,19 @@ +extern crate cortex_m_srp as srp; + +use srp::{C2, C4, P1, P3, Resource}; + +static R1: Resource = Resource::new(0); + +fn j1(prio: P1) { + R1.lock(&prio, |r1, _| { + // Would preempt this critical section + // srp::request(j2); + }); +} + +fn j2(prio: P3) { + srp::critical(|ceil| { + let r1 = R1.borrow(&prio, &ceil); + //~^ error + }); +} diff --git a/tests/cfail/race-2.rs b/tests/cfail/race-2.rs new file mode 100644 index 0000000..c2f564e --- /dev/null +++ b/tests/cfail/race-2.rs @@ -0,0 +1,22 @@ +extern crate cortex_m_srp as srp; + +use srp::{C2, C4, P1, P3, Resource}; + +static R1: Resource = Resource::new(0); +static R2: Resource = Resource::new(0); + +fn j1(prio: P1) { + R1.lock(&prio, |r1, _| { + // Would preempt this critical section + // srp::request(j2); + }); +} + +fn j2(prio: P3) { + R2.lock(&prio, |r2, c4| { + // OK C2 (R1's ceiling) <= C4 (system ceiling) + // BAD C2 (R1's ceiling) < P3 (j2's priority) + let r1 = R1.borrow(&prio, &c4); + //~^ error + }); +} diff --git a/tests/cfail/race.rs b/tests/cfail/race.rs deleted file mode 100644 index c2f564e..0000000 --- a/tests/cfail/race.rs +++ /dev/null @@ -1,22 +0,0 @@ -extern crate cortex_m_srp as srp; - -use srp::{C2, C4, P1, P3, Resource}; - -static R1: Resource = Resource::new(0); -static R2: Resource = Resource::new(0); - -fn j1(prio: P1) { - R1.lock(&prio, |r1, _| { - // Would preempt this critical section - // srp::request(j2); - }); -} - -fn j2(prio: P3) { - R2.lock(&prio, |r2, c4| { - // OK C2 (R1's ceiling) <= C4 (system ceiling) - // BAD C2 (R1's ceiling) < P3 (j2's priority) - let r1 = R1.borrow(&prio, &c4); - //~^ error - }); -} -- cgit v1.2.3