diff --git a/Cargo.toml b/Cargo.toml index 12b39235b6..1d70823f39 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -55,7 +55,7 @@ nightly = ["cortex-m-rtfm-macros/nightly", "heapless/const-fn"] timer-queue = ["cortex-m-rtfm-macros/timer-queue"] [target.x86_64-unknown-linux-gnu.dev-dependencies] -compiletest_rs = "0.3.16" +compiletest_rs = "0.3.21" tempdir = "0.3.7" [package.metadata.docs.rs] diff --git a/macros/src/codegen.rs b/macros/src/codegen.rs index 1d201c0866..94e8cd8ca5 100644 --- a/macros/src/codegen.rs +++ b/macros/src/codegen.rs @@ -136,7 +136,7 @@ pub fn app(app: &App, analysis: &Analysis) -> TokenStream { if res.expr.is_none() { let alias = &ctxt.statics[name]; - Some(quote!(#alias.set(res.#name);)) + Some(quote!(#alias.write(res.#name);)) } else { None } @@ -275,7 +275,7 @@ fn resources(ctxt: &mut Context, app: &App, analysis: &Analysis) -> proc_macro2: #(#cfgs)* #[doc = #symbol] static mut #alias: rtfm::export::MaybeUninit<#ty> = - rtfm::export::MaybeUninit::uninitialized(); + rtfm::export::MaybeUninit::uninit(); ) }), ); @@ -338,7 +338,7 @@ fn init(ctxt: &mut Context, app: &App, analysis: &Analysis) -> (proc_macro2::Tok let expr = &assign.right; quote!( #(#attrs)* - unsafe { #alias.set(#expr); } + unsafe { #alias.write(#expr); } ) } else { let left = &assign.left; @@ -1281,7 +1281,7 @@ fn tasks(ctxt: &mut Context, app: &App, analysis: &Analysis) -> proc_macro2::Tok if cfg!(feature = "nightly") { let inits = - (0..capacity).map(|_| quote!(rtfm::export::MaybeUninit::uninitialized())); + (0..capacity).map(|_| quote!(rtfm::export::MaybeUninit::uninit())); quote!( #[doc = #scheduleds_symbol] @@ -1294,7 +1294,7 @@ fn tasks(ctxt: &mut Context, app: &App, analysis: &Analysis) -> proc_macro2::Tok #[doc = #scheduleds_symbol] static mut #scheduleds_alias: rtfm::export::MaybeUninit<[rtfm::Instant; #capacity_lit]> = - rtfm::export::MaybeUninit::uninitialized(); + rtfm::export::MaybeUninit::uninit(); ) } } @@ -1305,7 +1305,7 @@ fn tasks(ctxt: &mut Context, app: &App, analysis: &Analysis) -> proc_macro2::Tok let inputs_symbol = format!("{}::INPUTS::{}", name, inputs_alias); let free_symbol = format!("{}::FREE_QUEUE::{}", name, free_alias); if cfg!(feature = "nightly") { - let inits = (0..capacity).map(|_| quote!(rtfm::export::MaybeUninit::uninitialized())); + let inits = (0..capacity).map(|_| quote!(rtfm::export::MaybeUninit::uninit())); items.push(quote!( #[doc = #free_symbol] @@ -1322,11 +1322,11 @@ fn tasks(ctxt: &mut Context, app: &App, analysis: &Analysis) -> proc_macro2::Tok #[doc = #free_symbol] static mut #free_alias: rtfm::export::MaybeUninit< rtfm::export::FreeQueue<#capacity_ty> - > = rtfm::export::MaybeUninit::uninitialized(); + > = rtfm::export::MaybeUninit::uninit(); #[doc = #inputs_symbol] static mut #inputs_alias: rtfm::export::MaybeUninit<[#ty; #capacity_lit]> = - rtfm::export::MaybeUninit::uninitialized(); + rtfm::export::MaybeUninit::uninit(); )); } @@ -1479,7 +1479,7 @@ fn dispatchers( } else { data.push(quote!( #[doc = #symbol] - static mut #ready_alias: #e::MaybeUninit<#ty> = #e::MaybeUninit::uninitialized(); + static mut #ready_alias: #e::MaybeUninit<#ty> = #e::MaybeUninit::uninit(); )); } data.push(quote!( @@ -1867,14 +1867,14 @@ fn timer_queue(ctxt: &mut Context, app: &App, analysis: &Analysis) -> proc_macro items.push(quote!( #[doc = #symbol] static mut #tq: rtfm::export::MaybeUninit> = - rtfm::export::MaybeUninit::uninitialized(); + rtfm::export::MaybeUninit::uninit(); )); } else { items.push(quote!( #[doc = #symbol] static mut #tq: rtfm::export::MaybeUninit> = - rtfm::export::MaybeUninit::uninitialized(); + rtfm::export::MaybeUninit::uninit(); )); } @@ -1945,32 +1945,32 @@ fn pre_init(ctxt: &Context, app: &App, analysis: &Analysis) -> proc_macro2::Toke // these are `MaybeUninit` arrays for task in ctxt.tasks.values() { let inputs = &task.inputs; - exprs.push(quote!(#inputs.set(core::mem::uninitialized());)) + exprs.push(quote!(#inputs.write(core::mem::uninitialized());)) } #[cfg(feature = "timer-queue")] for task in ctxt.tasks.values() { let scheduleds = &task.scheduleds; - exprs.push(quote!(#scheduleds.set(core::mem::uninitialized());)) + exprs.push(quote!(#scheduleds.write(core::mem::uninitialized());)) } // these are `MaybeUninit` `ReadyQueue`s for dispatcher in ctxt.dispatchers.values() { let rq = &dispatcher.ready_queue; - exprs.push(quote!(#rq.set(rtfm::export::ReadyQueue::new_sc());)) + exprs.push(quote!(#rq.write(rtfm::export::ReadyQueue::new_sc());)) } // these are `MaybeUninit` `FreeQueue`s for task in ctxt.tasks.values() { let fq = &task.free_queue; - exprs.push(quote!(#fq.set(rtfm::export::FreeQueue::new_sc());)) + exprs.push(quote!(#fq.write(rtfm::export::FreeQueue::new_sc());)) } } // Initialize the timer queue if !analysis.timer_queue.tasks.is_empty() { let tq = &ctxt.timer_queue; - exprs.push(quote!(#tq.set(rtfm::export::TimerQueue::new(p.SYST));)); + exprs.push(quote!(#tq.write(rtfm::export::TimerQueue::new(p.SYST));)); } // Populate the `FreeQueue`s diff --git a/src/export.rs b/src/export.rs index 495468e16d..cf7293b620 100644 --- a/src/export.rs +++ b/src/export.rs @@ -72,9 +72,9 @@ pub struct MaybeUninit { #[cfg(feature = "nightly")] impl MaybeUninit { - pub const fn uninitialized() -> Self { + pub const fn uninit() -> Self { MaybeUninit { - inner: core::mem::MaybeUninit::uninitialized(), + inner: core::mem::MaybeUninit::uninit(), } } @@ -86,8 +86,8 @@ impl MaybeUninit { self.inner.as_mut_ptr() } - pub fn set(&mut self, value: T) -> &mut T { - self.inner.set(value) + pub fn write(&mut self, value: T) -> &mut T { + self.inner.write(value) } } @@ -102,7 +102,7 @@ const MSG: &str = #[cfg(not(feature = "nightly"))] impl MaybeUninit { - pub const fn uninitialized() -> Self { + pub const fn uninit() -> Self { MaybeUninit { value: None } } @@ -138,7 +138,7 @@ impl MaybeUninit { } } - pub fn set(&mut self, val: T) { + pub fn write(&mut self, val: T) { // NOTE(volatile) we have observed UB when this uses a plain `ptr::write` unsafe { ptr::write_volatile(&mut self.value, Some(val)) } }