From ac0579c81f9e8f10321c77432c9ae759e406c371 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Tj=C3=A4der?= Date: Sun, 8 Jun 2025 12:17:58 +0200 Subject: UI: Test for references passed to spawn Related to and using code from Issue1065 Issue1065: https://github.com/rtic-rs/rtic/issues/1065 --- rtic/ui/task-reference-in-spawn.rs | 29 +++++++++++++++++++++++++++++ rtic/ui/task-reference-in-spawn.stderr | 14 ++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 rtic/ui/task-reference-in-spawn.rs create mode 100644 rtic/ui/task-reference-in-spawn.stderr diff --git a/rtic/ui/task-reference-in-spawn.rs b/rtic/ui/task-reference-in-spawn.rs new file mode 100644 index 0000000..54607af --- /dev/null +++ b/rtic/ui/task-reference-in-spawn.rs @@ -0,0 +1,29 @@ +#![no_main] + +#[rtic::app(device = lm3s6965, dispatchers = [SSI0, QEI0, GPIOA])] +mod app { + #[shared] + struct Shared {} + + #[local] + struct Local {} + + #[init] + fn init(_: init::Context) -> (Shared, Local) { + medium_prio::spawn().unwrap(); + (Shared {}, Local {}) + } + + #[task(priority = 2)] + async fn medium_prio(_: medium_prio::Context) { + let mut will_be_dropped: usize = 41; + will_be_dropped += 1; + + high_prio_print::spawn(&mut will_be_dropped).unwrap(); + } + + #[task(priority = 3)] + async fn high_prio_print(_: high_prio_print::Context, mut_ref: &mut usize) { + *mut_ref += 1000; + } +} diff --git a/rtic/ui/task-reference-in-spawn.stderr b/rtic/ui/task-reference-in-spawn.stderr new file mode 100644 index 0000000..38de78c --- /dev/null +++ b/rtic/ui/task-reference-in-spawn.stderr @@ -0,0 +1,14 @@ +error[E0521]: borrowed data escapes outside of function + --> ui/task-reference-in-spawn.rs:3:1 + | +3 | #[rtic::app(device = lm3s6965, dispatchers = [SSI0, QEI0, GPIOA])] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + | | + | `_0` is a reference that is only valid in the function body + | `_0` escapes the function body here + | argument requires that `'1` must outlive `'static` +... +26 | async fn high_prio_print(_: high_prio_print::Context, mut_ref: &mut usize) { + | - let's call the lifetime of this reference `'1` + | + = note: this error originates in the attribute macro `rtic::app` (in Nightly builds, run with -Z macro-backtrace for more info) -- cgit v1.2.3