aboutsummaryrefslogtreecommitdiff
path: root/embassy-executor/tests/ui
diff options
context:
space:
mode:
authorMatthew Tran <[email protected]>2025-05-28 22:00:25 -0500
committerMatthew Tran <[email protected]>2025-05-28 23:37:17 -0500
commita4d4f62a1e0e808ec3dd93e282f517a2f8ad9fa5 (patch)
tree30529d5f171a70131885c840b6de040da6c5082a /embassy-executor/tests/ui
parent4766cc6f9756b54bb2e25be5ba5276538ea4917b (diff)
Allow `-> impl Future<Output = ()>` in #[task]
Diffstat (limited to 'embassy-executor/tests/ui')
-rw-r--r--embassy-executor/tests/ui/bad_return_impl_trait.rs9
-rw-r--r--embassy-executor/tests/ui/bad_return_impl_trait.stderr120
-rw-r--r--embassy-executor/tests/ui/bad_return_impl_trait_nightly.rs9
-rw-r--r--embassy-executor/tests/ui/bad_return_impl_trait_nightly.stderr9
4 files changed, 147 insertions, 0 deletions
diff --git a/embassy-executor/tests/ui/bad_return_impl_trait.rs b/embassy-executor/tests/ui/bad_return_impl_trait.rs
new file mode 100644
index 000000000..baaa7dc5a
--- /dev/null
+++ b/embassy-executor/tests/ui/bad_return_impl_trait.rs
@@ -0,0 +1,9 @@
1#![cfg_attr(feature = "nightly", feature(impl_trait_in_assoc_type))]
2use core::future::Future;
3
4#[embassy_executor::task]
5fn task() -> impl Future<Output = u32> {
6 async { 5 }
7}
8
9fn main() {}
diff --git a/embassy-executor/tests/ui/bad_return_impl_trait.stderr b/embassy-executor/tests/ui/bad_return_impl_trait.stderr
new file mode 100644
index 000000000..9e2df353e
--- /dev/null
+++ b/embassy-executor/tests/ui/bad_return_impl_trait.stderr
@@ -0,0 +1,120 @@
1error[E0277]: task function futures must resolve to `()`
2 --> tests/ui/bad_return_impl_trait.rs:5:4
3 |
44 | #[embassy_executor::task]
5 | ------------------------- required by a bound introduced by this call
65 | fn task() -> impl Future<Output = u32> {
7 | ^^^^ the trait `TaskFn<_>` is not implemented for fn item `fn() -> impl Future<Output = u32> {__task_task}`
8 |
9 = note: use `async fn` or change the return type to `impl Future<Output = ()>`
10note: required by a bound in `task_pool_size`
11 --> src/lib.rs
12 |
13 | pub const fn task_pool_size<F, Args, Fut, const POOL_SIZE: usize>(_: F) -> usize
14 | -------------- required by a bound in this function
15 | where
16 | F: TaskFn<Args, Fut = Fut>,
17 | ^^^^^^^^^ required by this bound in `task_pool_size`
18
19error[E0277]: task function futures must resolve to `()`
20 --> tests/ui/bad_return_impl_trait.rs:4:1
21 |
224 | #[embassy_executor::task]
23 | ^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `TaskFn<_>` is not implemented for fn item `fn() -> impl Future<Output = u32> {__task_task}`
24 |
25 = note: use `async fn` or change the return type to `impl Future<Output = ()>`
26note: required by a bound in `task_pool_size`
27 --> src/lib.rs
28 |
29 | pub const fn task_pool_size<F, Args, Fut, const POOL_SIZE: usize>(_: F) -> usize
30 | -------------- required by a bound in this function
31 | where
32 | F: TaskFn<Args, Fut = Fut>,
33 | ^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `task_pool_size`
34 = note: this error originates in the attribute macro `embassy_executor::task` (in Nightly builds, run with -Z macro-backtrace for more info)
35
36error[E0277]: task function futures must resolve to `()`
37 --> tests/ui/bad_return_impl_trait.rs:5:4
38 |
394 | #[embassy_executor::task]
40 | ------------------------- required by a bound introduced by this call
415 | fn task() -> impl Future<Output = u32> {
42 | ^^^^ the trait `TaskFn<_>` is not implemented for fn item `fn() -> impl Future<Output = u32> {__task_task}`
43 |
44 = note: use `async fn` or change the return type to `impl Future<Output = ()>`
45note: required by a bound in `task_pool_align`
46 --> src/lib.rs
47 |
48 | pub const fn task_pool_align<F, Args, Fut, const POOL_SIZE: usize>(_: F) -> usize
49 | --------------- required by a bound in this function
50 | where
51 | F: TaskFn<Args, Fut = Fut>,
52 | ^^^^^^^^^ required by this bound in `task_pool_align`
53
54error[E0277]: task function futures must resolve to `()`
55 --> tests/ui/bad_return_impl_trait.rs:4:1
56 |
574 | #[embassy_executor::task]
58 | ^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `TaskFn<_>` is not implemented for fn item `fn() -> impl Future<Output = u32> {__task_task}`
59 |
60 = note: use `async fn` or change the return type to `impl Future<Output = ()>`
61note: required by a bound in `task_pool_align`
62 --> src/lib.rs
63 |
64 | pub const fn task_pool_align<F, Args, Fut, const POOL_SIZE: usize>(_: F) -> usize
65 | --------------- required by a bound in this function
66 | where
67 | F: TaskFn<Args, Fut = Fut>,
68 | ^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `task_pool_align`
69 = note: this error originates in the attribute macro `embassy_executor::task` (in Nightly builds, run with -Z macro-backtrace for more info)
70
71error[E0277]: task function futures must resolve to `()`
72 --> tests/ui/bad_return_impl_trait.rs:5:4
73 |
744 | #[embassy_executor::task]
75 | ------------------------- required by a bound introduced by this call
765 | fn task() -> impl Future<Output = u32> {
77 | ^^^^ the trait `TaskFn<_>` is not implemented for fn item `fn() -> impl Future<Output = u32> {__task_task}`
78 |
79 = note: use `async fn` or change the return type to `impl Future<Output = ()>`
80note: required by a bound in `task_pool_new`
81 --> src/lib.rs
82 |
83 | pub const fn task_pool_new<F, Args, Fut, const POOL_SIZE: usize>(_: F) -> TaskPool<Fut, POOL_SIZE>
84 | ------------- required by a bound in this function
85 | where
86 | F: TaskFn<Args, Fut = Fut>,
87 | ^^^^^^^^^ required by this bound in `task_pool_new`
88
89error[E0277]: task function futures must resolve to `()`
90 --> tests/ui/bad_return_impl_trait.rs:4:1
91 |
924 | #[embassy_executor::task]
93 | ^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `TaskFn<_>` is not implemented for fn item `fn() -> impl Future<Output = u32> {__task_task}`
94 |
95 = note: use `async fn` or change the return type to `impl Future<Output = ()>`
96note: required by a bound in `task_pool_new`
97 --> src/lib.rs
98 |
99 | pub const fn task_pool_new<F, Args, Fut, const POOL_SIZE: usize>(_: F) -> TaskPool<Fut, POOL_SIZE>
100 | ------------- required by a bound in this function
101 | where
102 | F: TaskFn<Args, Fut = Fut>,
103 | ^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `task_pool_new`
104 = note: this error originates in the attribute macro `embassy_executor::task` (in Nightly builds, run with -Z macro-backtrace for more info)
105
106error[E0277]: task function futures must resolve to `()`
107 --> tests/ui/bad_return_impl_trait.rs:5:4
108 |
1094 | #[embassy_executor::task]
110 | ------------------------- required by a bound introduced by this call
1115 | fn task() -> impl Future<Output = u32> {
112 | ^^^^ the trait `TaskFn<_>` is not implemented for fn item `fn() -> impl Future<Output = u32> {__task_task}`
113 |
114 = note: use `async fn` or change the return type to `impl Future<Output = ()>`
115note: required by a bound in `__task_pool_get`
116 --> tests/ui/bad_return_impl_trait.rs:4:1
117 |
1184 | #[embassy_executor::task]
119 | ^^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `__task_pool_get`
120 = note: this error originates in the attribute macro `embassy_executor::task` (in Nightly builds, run with -Z macro-backtrace for more info)
diff --git a/embassy-executor/tests/ui/bad_return_impl_trait_nightly.rs b/embassy-executor/tests/ui/bad_return_impl_trait_nightly.rs
new file mode 100644
index 000000000..baaa7dc5a
--- /dev/null
+++ b/embassy-executor/tests/ui/bad_return_impl_trait_nightly.rs
@@ -0,0 +1,9 @@
1#![cfg_attr(feature = "nightly", feature(impl_trait_in_assoc_type))]
2use core::future::Future;
3
4#[embassy_executor::task]
5fn task() -> impl Future<Output = u32> {
6 async { 5 }
7}
8
9fn main() {}
diff --git a/embassy-executor/tests/ui/bad_return_impl_trait_nightly.stderr b/embassy-executor/tests/ui/bad_return_impl_trait_nightly.stderr
new file mode 100644
index 000000000..21e20d5c0
--- /dev/null
+++ b/embassy-executor/tests/ui/bad_return_impl_trait_nightly.stderr
@@ -0,0 +1,9 @@
1error[E0277]: the trait bound `u32: TaskReturnValue` is not satisfied
2 --> tests/ui/bad_return_impl_trait_nightly.rs:4:1
3 |
44 | #[embassy_executor::task]
5 | ^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `TaskReturnValue` is not implemented for `u32`
6 |
7 = help: the following other types implement trait `TaskReturnValue`:
8 ()
9 <fn() -> ! as _export::HasOutput>::Output