diff --git a/embassy-executor-macros/src/macros/task.rs b/embassy-executor-macros/src/macros/task.rs index 8a2a7fdb9..e5523c5cd 100644 --- a/embassy-executor-macros/src/macros/task.rs +++ b/embassy-executor-macros/src/macros/task.rs @@ -145,33 +145,39 @@ pub fn run(args: TokenStream, item: TokenStream) -> TokenStream { }; #[cfg(not(feature = "nightly"))] let mut task_outer_body = quote! { - const fn __task_pool_size(_: F) -> usize + // We use Fut instead of F::Fut because F::Fut causes the compiler to generate some ugly + // unrelated errors when the task has a compile error. + const fn __task_pool_size(_: F) -> usize where - F: #embassy_executor::_export::TaskFn, + F: #embassy_executor::_export::TaskFn, + Fut: ::core::future::Future + 'static, { ::core::mem::size_of::< - #embassy_executor::raw::TaskPool + #embassy_executor::raw::TaskPool >() } - const fn __task_pool_align(_: F) -> usize + const fn __task_pool_align(_: F) -> usize where - F: #embassy_executor::_export::TaskFn, + F: #embassy_executor::_export::TaskFn, + Fut: ::core::future::Future + 'static, { ::core::mem::align_of::< - #embassy_executor::raw::TaskPool + #embassy_executor::raw::TaskPool >() } - const fn __task_pool_new(_: F) -> #embassy_executor::raw::TaskPool + const fn __task_pool_new(_: F) -> #embassy_executor::raw::TaskPool where - F: #embassy_executor::_export::TaskFn, + F: #embassy_executor::_export::TaskFn, + Fut: ::core::future::Future + 'static, { #embassy_executor::raw::TaskPool::new() } - const fn __task_pool_get(_: F) -> &'static #embassy_executor::raw::TaskPool + const fn __task_pool_get(_: F) -> &'static #embassy_executor::raw::TaskPool where - F: #embassy_executor::_export::TaskFn + F: #embassy_executor::_export::TaskFn, + Fut: ::core::future::Future + 'static, { unsafe { &*POOL.get().cast() } }