diff options
| author | Dario Nieuwenhuis <[email protected]> | 2024-10-20 23:48:58 +0200 |
|---|---|---|
| committer | Dario Nieuwenhuis <[email protected]> | 2024-10-20 23:54:17 +0200 |
| commit | 8f9826872332fb0d2abd3ffc3889ff4c0e1c3909 (patch) | |
| tree | cb9672e8a39c563fb53b1c5f7519bbc0eaa0b503 | |
| parent | f0de0493084759a5e7310c816919996b201f0bc4 (diff) | |
executor: add compile-fail / ui tests.
38 files changed, 278 insertions, 1 deletions
diff --git a/.github/ci/test-nightly.sh b/.github/ci/test-nightly.sh index 1724ffe89..a03b55e8d 100755 --- a/.github/ci/test-nightly.sh +++ b/.github/ci/test-nightly.sh | |||
| @@ -9,6 +9,9 @@ export CARGO_HOME=/ci/cache/cargo | |||
| 9 | export CARGO_TARGET_DIR=/ci/cache/target | 9 | export CARGO_TARGET_DIR=/ci/cache/target |
| 10 | mv rust-toolchain-nightly.toml rust-toolchain.toml | 10 | mv rust-toolchain-nightly.toml rust-toolchain.toml |
| 11 | 11 | ||
| 12 | cargo test --manifest-path ./embassy-executor/Cargo.toml | ||
| 13 | cargo test --manifest-path ./embassy-executor/Cargo.toml --features nightly | ||
| 14 | |||
| 12 | MIRIFLAGS=-Zmiri-ignore-leaks cargo miri test --manifest-path ./embassy-executor/Cargo.toml | 15 | MIRIFLAGS=-Zmiri-ignore-leaks cargo miri test --manifest-path ./embassy-executor/Cargo.toml |
| 13 | MIRIFLAGS=-Zmiri-ignore-leaks cargo miri test --manifest-path ./embassy-executor/Cargo.toml --features nightly | 16 | MIRIFLAGS=-Zmiri-ignore-leaks cargo miri test --manifest-path ./embassy-executor/Cargo.toml --features nightly |
| 14 | MIRIFLAGS=-Zmiri-ignore-leaks cargo miri test --manifest-path ./embassy-sync/Cargo.toml | 17 | MIRIFLAGS=-Zmiri-ignore-leaks cargo miri test --manifest-path ./embassy-sync/Cargo.toml |
diff --git a/.github/ci/test.sh b/.github/ci/test.sh index 0de265049..0fe088bfe 100755 --- a/.github/ci/test.sh +++ b/.github/ci/test.sh | |||
| @@ -12,6 +12,7 @@ export CARGO_TARGET_DIR=/ci/cache/target | |||
| 12 | # used when pointing stm32-metapac to a CI-built one. | 12 | # used when pointing stm32-metapac to a CI-built one. |
| 13 | export CARGO_NET_GIT_FETCH_WITH_CLI=true | 13 | export CARGO_NET_GIT_FETCH_WITH_CLI=true |
| 14 | 14 | ||
| 15 | cargo test --manifest-path ./embassy-executor/Cargo.toml | ||
| 15 | cargo test --manifest-path ./embassy-futures/Cargo.toml | 16 | cargo test --manifest-path ./embassy-futures/Cargo.toml |
| 16 | cargo test --manifest-path ./embassy-sync/Cargo.toml | 17 | cargo test --manifest-path ./embassy-sync/Cargo.toml |
| 17 | cargo test --manifest-path ./embassy-embedded-hal/Cargo.toml | 18 | cargo test --manifest-path ./embassy-embedded-hal/Cargo.toml |
diff --git a/embassy-executor/Cargo.toml b/embassy-executor/Cargo.toml index e2fedce3c..e138f93b0 100644 --- a/embassy-executor/Cargo.toml +++ b/embassy-executor/Cargo.toml | |||
| @@ -55,7 +55,7 @@ avr-device = { version = "0.5.3", optional = true } | |||
| 55 | 55 | ||
| 56 | [dev-dependencies] | 56 | [dev-dependencies] |
| 57 | critical-section = { version = "1.1", features = ["std"] } | 57 | critical-section = { version = "1.1", features = ["std"] } |
| 58 | 58 | trybuild = "1.0" | |
| 59 | 59 | ||
| 60 | [features] | 60 | [features] |
| 61 | 61 | ||
diff --git a/embassy-executor/tests/ui.rs b/embassy-executor/tests/ui.rs new file mode 100644 index 000000000..be4679485 --- /dev/null +++ b/embassy-executor/tests/ui.rs | |||
| @@ -0,0 +1,23 @@ | |||
| 1 | #[cfg(not(miri))] | ||
| 2 | #[test] | ||
| 3 | fn ui() { | ||
| 4 | let t = trybuild::TestCases::new(); | ||
| 5 | t.compile_fail("tests/ui/abi.rs"); | ||
| 6 | t.compile_fail("tests/ui/bad_return.rs"); | ||
| 7 | t.compile_fail("tests/ui/generics.rs"); | ||
| 8 | t.compile_fail("tests/ui/impl_trait_nested.rs"); | ||
| 9 | t.compile_fail("tests/ui/impl_trait.rs"); | ||
| 10 | t.compile_fail("tests/ui/impl_trait_static.rs"); | ||
| 11 | t.compile_fail("tests/ui/nonstatic_ref_anon_nested.rs"); | ||
| 12 | t.compile_fail("tests/ui/nonstatic_ref_anon.rs"); | ||
| 13 | t.compile_fail("tests/ui/nonstatic_ref_elided.rs"); | ||
| 14 | t.compile_fail("tests/ui/nonstatic_ref_generic.rs"); | ||
| 15 | t.compile_fail("tests/ui/nonstatic_struct_anon.rs"); | ||
| 16 | #[cfg(not(feature = "nightly"))] // we can't catch this case with the macro, so the output changes on nightly. | ||
| 17 | t.compile_fail("tests/ui/nonstatic_struct_elided.rs"); | ||
| 18 | t.compile_fail("tests/ui/nonstatic_struct_generic.rs"); | ||
| 19 | t.compile_fail("tests/ui/not_async.rs"); | ||
| 20 | t.compile_fail("tests/ui/self_ref.rs"); | ||
| 21 | t.compile_fail("tests/ui/self.rs"); | ||
| 22 | t.compile_fail("tests/ui/where_clause.rs"); | ||
| 23 | } | ||
diff --git a/embassy-executor/tests/ui/abi.rs b/embassy-executor/tests/ui/abi.rs new file mode 100644 index 000000000..fd52f7e41 --- /dev/null +++ b/embassy-executor/tests/ui/abi.rs | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | #![cfg_attr(feature = "nightly", feature(impl_trait_in_assoc_type))] | ||
| 2 | |||
| 3 | struct Foo<'a>(&'a ()); | ||
| 4 | |||
| 5 | #[embassy_executor::task] | ||
| 6 | async extern "C" fn task() {} | ||
| 7 | |||
| 8 | fn main() {} | ||
diff --git a/embassy-executor/tests/ui/abi.stderr b/embassy-executor/tests/ui/abi.stderr new file mode 100644 index 000000000..e264e371a --- /dev/null +++ b/embassy-executor/tests/ui/abi.stderr | |||
| @@ -0,0 +1,5 @@ | |||
| 1 | error: task functions must not have an ABI qualifier | ||
| 2 | --> tests/ui/abi.rs:6:1 | ||
| 3 | | | ||
| 4 | 6 | async extern "C" fn task() {} | ||
| 5 | | ^^^^^^^^^^^^^^^^^^^^^^^^^^ | ||
diff --git a/embassy-executor/tests/ui/bad_return.rs b/embassy-executor/tests/ui/bad_return.rs new file mode 100644 index 000000000..f09a5205b --- /dev/null +++ b/embassy-executor/tests/ui/bad_return.rs | |||
| @@ -0,0 +1,10 @@ | |||
| 1 | #![cfg_attr(feature = "nightly", feature(impl_trait_in_assoc_type))] | ||
| 2 | |||
| 3 | struct Foo<'a>(&'a ()); | ||
| 4 | |||
| 5 | #[embassy_executor::task] | ||
| 6 | async fn task() -> u32 { | ||
| 7 | 5 | ||
| 8 | } | ||
| 9 | |||
| 10 | fn main() {} | ||
diff --git a/embassy-executor/tests/ui/bad_return.stderr b/embassy-executor/tests/ui/bad_return.stderr new file mode 100644 index 000000000..e9d94dff8 --- /dev/null +++ b/embassy-executor/tests/ui/bad_return.stderr | |||
| @@ -0,0 +1,5 @@ | |||
| 1 | error: task functions must either not return a value, return `()` or return `!` | ||
| 2 | --> tests/ui/bad_return.rs:6:1 | ||
| 3 | | | ||
| 4 | 6 | async fn task() -> u32 { | ||
| 5 | | ^^^^^^^^^^^^^^^^^^^^^^ | ||
diff --git a/embassy-executor/tests/ui/generics.rs b/embassy-executor/tests/ui/generics.rs new file mode 100644 index 000000000..b83123bb1 --- /dev/null +++ b/embassy-executor/tests/ui/generics.rs | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | #![cfg_attr(feature = "nightly", feature(impl_trait_in_assoc_type))] | ||
| 2 | |||
| 3 | struct Foo<'a>(&'a ()); | ||
| 4 | |||
| 5 | #[embassy_executor::task] | ||
| 6 | async fn task<T: Sized>(_t: T) {} | ||
| 7 | |||
| 8 | fn main() {} | ||
diff --git a/embassy-executor/tests/ui/generics.stderr b/embassy-executor/tests/ui/generics.stderr new file mode 100644 index 000000000..197719a7b --- /dev/null +++ b/embassy-executor/tests/ui/generics.stderr | |||
| @@ -0,0 +1,5 @@ | |||
| 1 | error: task functions must not be generic | ||
| 2 | --> tests/ui/generics.rs:6:1 | ||
| 3 | | | ||
| 4 | 6 | async fn task<T: Sized>(_t: T) {} | ||
| 5 | | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ||
diff --git a/embassy-executor/tests/ui/impl_trait.rs b/embassy-executor/tests/ui/impl_trait.rs new file mode 100644 index 000000000..a21402aa0 --- /dev/null +++ b/embassy-executor/tests/ui/impl_trait.rs | |||
| @@ -0,0 +1,6 @@ | |||
| 1 | #![cfg_attr(feature = "nightly", feature(impl_trait_in_assoc_type))] | ||
| 2 | |||
| 3 | #[embassy_executor::task] | ||
| 4 | async fn foo(_x: impl Sized) {} | ||
| 5 | |||
| 6 | fn main() {} | ||
diff --git a/embassy-executor/tests/ui/impl_trait.stderr b/embassy-executor/tests/ui/impl_trait.stderr new file mode 100644 index 000000000..099b1828f --- /dev/null +++ b/embassy-executor/tests/ui/impl_trait.stderr | |||
| @@ -0,0 +1,5 @@ | |||
| 1 | error: `impl Trait` is not allowed in task arguments. It is syntax sugar for generics, and tasks can't be generic. | ||
| 2 | --> tests/ui/impl_trait.rs:4:18 | ||
| 3 | | | ||
| 4 | 4 | async fn foo(_x: impl Sized) {} | ||
| 5 | | ^^^^^^^^^^ | ||
diff --git a/embassy-executor/tests/ui/impl_trait_nested.rs b/embassy-executor/tests/ui/impl_trait_nested.rs new file mode 100644 index 000000000..07442b8fa --- /dev/null +++ b/embassy-executor/tests/ui/impl_trait_nested.rs | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | #![cfg_attr(feature = "nightly", feature(impl_trait_in_assoc_type))] | ||
| 2 | |||
| 3 | struct Foo<T>(T); | ||
| 4 | |||
| 5 | #[embassy_executor::task] | ||
| 6 | async fn foo(_x: Foo<impl Sized + 'static>) {} | ||
| 7 | |||
| 8 | fn main() {} | ||
diff --git a/embassy-executor/tests/ui/impl_trait_nested.stderr b/embassy-executor/tests/ui/impl_trait_nested.stderr new file mode 100644 index 000000000..39592f958 --- /dev/null +++ b/embassy-executor/tests/ui/impl_trait_nested.stderr | |||
| @@ -0,0 +1,5 @@ | |||
| 1 | error: `impl Trait` is not allowed in task arguments. It is syntax sugar for generics, and tasks can't be generic. | ||
| 2 | --> tests/ui/impl_trait_nested.rs:6:22 | ||
| 3 | | | ||
| 4 | 6 | async fn foo(_x: Foo<impl Sized + 'static>) {} | ||
| 5 | | ^^^^^^^^^^^^^^^^^^^^ | ||
diff --git a/embassy-executor/tests/ui/impl_trait_static.rs b/embassy-executor/tests/ui/impl_trait_static.rs new file mode 100644 index 000000000..272470f98 --- /dev/null +++ b/embassy-executor/tests/ui/impl_trait_static.rs | |||
| @@ -0,0 +1,6 @@ | |||
| 1 | #![cfg_attr(feature = "nightly", feature(impl_trait_in_assoc_type))] | ||
| 2 | |||
| 3 | #[embassy_executor::task] | ||
| 4 | async fn foo(_x: impl Sized + 'static) {} | ||
| 5 | |||
| 6 | fn main() {} | ||
diff --git a/embassy-executor/tests/ui/impl_trait_static.stderr b/embassy-executor/tests/ui/impl_trait_static.stderr new file mode 100644 index 000000000..0032a20c9 --- /dev/null +++ b/embassy-executor/tests/ui/impl_trait_static.stderr | |||
| @@ -0,0 +1,5 @@ | |||
| 1 | error: `impl Trait` is not allowed in task arguments. It is syntax sugar for generics, and tasks can't be generic. | ||
| 2 | --> tests/ui/impl_trait_static.rs:4:18 | ||
| 3 | | | ||
| 4 | 4 | async fn foo(_x: impl Sized + 'static) {} | ||
| 5 | | ^^^^^^^^^^^^^^^^^^^^ | ||
diff --git a/embassy-executor/tests/ui/nonstatic_ref_anon.rs b/embassy-executor/tests/ui/nonstatic_ref_anon.rs new file mode 100644 index 000000000..417c360a1 --- /dev/null +++ b/embassy-executor/tests/ui/nonstatic_ref_anon.rs | |||
| @@ -0,0 +1,6 @@ | |||
| 1 | #![cfg_attr(feature = "nightly", feature(impl_trait_in_assoc_type))] | ||
| 2 | |||
| 3 | #[embassy_executor::task] | ||
| 4 | async fn foo(_x: &'_ u32) {} | ||
| 5 | |||
| 6 | fn main() {} | ||
diff --git a/embassy-executor/tests/ui/nonstatic_ref_anon.stderr b/embassy-executor/tests/ui/nonstatic_ref_anon.stderr new file mode 100644 index 000000000..0544de843 --- /dev/null +++ b/embassy-executor/tests/ui/nonstatic_ref_anon.stderr | |||
| @@ -0,0 +1,5 @@ | |||
| 1 | error: Arguments for tasks must live forever. Try using the `'static` lifetime. | ||
| 2 | --> tests/ui/nonstatic_ref_anon.rs:4:19 | ||
| 3 | | | ||
| 4 | 4 | async fn foo(_x: &'_ u32) {} | ||
| 5 | | ^^ | ||
diff --git a/embassy-executor/tests/ui/nonstatic_ref_anon_nested.rs b/embassy-executor/tests/ui/nonstatic_ref_anon_nested.rs new file mode 100644 index 000000000..175ebccc1 --- /dev/null +++ b/embassy-executor/tests/ui/nonstatic_ref_anon_nested.rs | |||
| @@ -0,0 +1,6 @@ | |||
| 1 | #![cfg_attr(feature = "nightly", feature(impl_trait_in_assoc_type))] | ||
| 2 | |||
| 3 | #[embassy_executor::task] | ||
| 4 | async fn foo(_x: &'static &'_ u32) {} | ||
| 5 | |||
| 6 | fn main() {} | ||
diff --git a/embassy-executor/tests/ui/nonstatic_ref_anon_nested.stderr b/embassy-executor/tests/ui/nonstatic_ref_anon_nested.stderr new file mode 100644 index 000000000..79f262e6b --- /dev/null +++ b/embassy-executor/tests/ui/nonstatic_ref_anon_nested.stderr | |||
| @@ -0,0 +1,5 @@ | |||
| 1 | error: Arguments for tasks must live forever. Try using the `'static` lifetime. | ||
| 2 | --> tests/ui/nonstatic_ref_anon_nested.rs:4:28 | ||
| 3 | | | ||
| 4 | 4 | async fn foo(_x: &'static &'_ u32) {} | ||
| 5 | | ^^ | ||
diff --git a/embassy-executor/tests/ui/nonstatic_ref_elided.rs b/embassy-executor/tests/ui/nonstatic_ref_elided.rs new file mode 100644 index 000000000..cf49ad709 --- /dev/null +++ b/embassy-executor/tests/ui/nonstatic_ref_elided.rs | |||
| @@ -0,0 +1,6 @@ | |||
| 1 | #![cfg_attr(feature = "nightly", feature(impl_trait_in_assoc_type))] | ||
| 2 | |||
| 3 | #[embassy_executor::task] | ||
| 4 | async fn foo(_x: &u32) {} | ||
| 5 | |||
| 6 | fn main() {} | ||
diff --git a/embassy-executor/tests/ui/nonstatic_ref_elided.stderr b/embassy-executor/tests/ui/nonstatic_ref_elided.stderr new file mode 100644 index 000000000..7e2b9eb7c --- /dev/null +++ b/embassy-executor/tests/ui/nonstatic_ref_elided.stderr | |||
| @@ -0,0 +1,5 @@ | |||
| 1 | error: Arguments for tasks must live forever. Try using the `'static` lifetime. | ||
| 2 | --> tests/ui/nonstatic_ref_elided.rs:4:18 | ||
| 3 | | | ||
| 4 | 4 | async fn foo(_x: &u32) {} | ||
| 5 | | ^ | ||
diff --git a/embassy-executor/tests/ui/nonstatic_ref_generic.rs b/embassy-executor/tests/ui/nonstatic_ref_generic.rs new file mode 100644 index 000000000..3f8a26cf8 --- /dev/null +++ b/embassy-executor/tests/ui/nonstatic_ref_generic.rs | |||
| @@ -0,0 +1,6 @@ | |||
| 1 | #![cfg_attr(feature = "nightly", feature(impl_trait_in_assoc_type))] | ||
| 2 | |||
| 3 | #[embassy_executor::task] | ||
| 4 | async fn foo<'a>(_x: &'a u32) {} | ||
| 5 | |||
| 6 | fn main() {} | ||
diff --git a/embassy-executor/tests/ui/nonstatic_ref_generic.stderr b/embassy-executor/tests/ui/nonstatic_ref_generic.stderr new file mode 100644 index 000000000..af8491ad7 --- /dev/null +++ b/embassy-executor/tests/ui/nonstatic_ref_generic.stderr | |||
| @@ -0,0 +1,11 @@ | |||
| 1 | error: task functions must not be generic | ||
| 2 | --> tests/ui/nonstatic_ref_generic.rs:4:1 | ||
| 3 | | | ||
| 4 | 4 | async fn foo<'a>(_x: &'a u32) {} | ||
| 5 | | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ||
| 6 | |||
| 7 | error: Arguments for tasks must live forever. Try using the `'static` lifetime. | ||
| 8 | --> tests/ui/nonstatic_ref_generic.rs:4:23 | ||
| 9 | | | ||
| 10 | 4 | async fn foo<'a>(_x: &'a u32) {} | ||
| 11 | | ^^ | ||
diff --git a/embassy-executor/tests/ui/nonstatic_struct_anon.rs b/embassy-executor/tests/ui/nonstatic_struct_anon.rs new file mode 100644 index 000000000..ba95d1459 --- /dev/null +++ b/embassy-executor/tests/ui/nonstatic_struct_anon.rs | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | #![cfg_attr(feature = "nightly", feature(impl_trait_in_assoc_type))] | ||
| 2 | |||
| 3 | struct Foo<'a>(&'a ()); | ||
| 4 | |||
| 5 | #[embassy_executor::task] | ||
| 6 | async fn task(_x: Foo<'_>) {} | ||
| 7 | |||
| 8 | fn main() {} | ||
diff --git a/embassy-executor/tests/ui/nonstatic_struct_anon.stderr b/embassy-executor/tests/ui/nonstatic_struct_anon.stderr new file mode 100644 index 000000000..5df2a6e06 --- /dev/null +++ b/embassy-executor/tests/ui/nonstatic_struct_anon.stderr | |||
| @@ -0,0 +1,5 @@ | |||
| 1 | error: Arguments for tasks must live forever. Try using the `'static` lifetime. | ||
| 2 | --> tests/ui/nonstatic_struct_anon.rs:6:23 | ||
| 3 | | | ||
| 4 | 6 | async fn task(_x: Foo<'_>) {} | ||
| 5 | | ^^ | ||
diff --git a/embassy-executor/tests/ui/nonstatic_struct_elided.rs b/embassy-executor/tests/ui/nonstatic_struct_elided.rs new file mode 100644 index 000000000..4cfe2966a --- /dev/null +++ b/embassy-executor/tests/ui/nonstatic_struct_elided.rs | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | #![cfg_attr(feature = "nightly", feature(impl_trait_in_assoc_type))] | ||
| 2 | |||
| 3 | struct Foo<'a>(&'a ()); | ||
| 4 | |||
| 5 | #[embassy_executor::task] | ||
| 6 | async fn task(_x: Foo) {} | ||
| 7 | |||
| 8 | fn main() {} | ||
diff --git a/embassy-executor/tests/ui/nonstatic_struct_elided.stderr b/embassy-executor/tests/ui/nonstatic_struct_elided.stderr new file mode 100644 index 000000000..099ef8b4e --- /dev/null +++ b/embassy-executor/tests/ui/nonstatic_struct_elided.stderr | |||
| @@ -0,0 +1,10 @@ | |||
| 1 | error[E0726]: implicit elided lifetime not allowed here | ||
| 2 | --> tests/ui/nonstatic_struct_elided.rs:6:19 | ||
| 3 | | | ||
| 4 | 6 | async fn task(_x: Foo) {} | ||
| 5 | | ^^^ expected lifetime parameter | ||
| 6 | | | ||
| 7 | help: indicate the anonymous lifetime | ||
| 8 | | | ||
| 9 | 6 | async fn task(_x: Foo<'_>) {} | ||
| 10 | | ++++ | ||
diff --git a/embassy-executor/tests/ui/nonstatic_struct_generic.rs b/embassy-executor/tests/ui/nonstatic_struct_generic.rs new file mode 100644 index 000000000..ec3d908f6 --- /dev/null +++ b/embassy-executor/tests/ui/nonstatic_struct_generic.rs | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | #![cfg_attr(feature = "nightly", feature(impl_trait_in_assoc_type))] | ||
| 2 | |||
| 3 | struct Foo<'a>(&'a ()); | ||
| 4 | |||
| 5 | #[embassy_executor::task] | ||
| 6 | async fn task<'a>(_x: Foo<'a>) {} | ||
| 7 | |||
| 8 | fn main() {} | ||
diff --git a/embassy-executor/tests/ui/nonstatic_struct_generic.stderr b/embassy-executor/tests/ui/nonstatic_struct_generic.stderr new file mode 100644 index 000000000..61d5231bc --- /dev/null +++ b/embassy-executor/tests/ui/nonstatic_struct_generic.stderr | |||
| @@ -0,0 +1,11 @@ | |||
| 1 | error: task functions must not be generic | ||
| 2 | --> tests/ui/nonstatic_struct_generic.rs:6:1 | ||
| 3 | | | ||
| 4 | 6 | async fn task<'a>(_x: Foo<'a>) {} | ||
| 5 | | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ||
| 6 | |||
| 7 | error: Arguments for tasks must live forever. Try using the `'static` lifetime. | ||
| 8 | --> tests/ui/nonstatic_struct_generic.rs:6:27 | ||
| 9 | | | ||
| 10 | 6 | async fn task<'a>(_x: Foo<'a>) {} | ||
| 11 | | ^^ | ||
diff --git a/embassy-executor/tests/ui/not_async.rs b/embassy-executor/tests/ui/not_async.rs new file mode 100644 index 000000000..f3f7e9bd2 --- /dev/null +++ b/embassy-executor/tests/ui/not_async.rs | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | #![cfg_attr(feature = "nightly", feature(impl_trait_in_assoc_type))] | ||
| 2 | |||
| 3 | struct Foo<'a>(&'a ()); | ||
| 4 | |||
| 5 | #[embassy_executor::task] | ||
| 6 | fn task() {} | ||
| 7 | |||
| 8 | fn main() {} | ||
diff --git a/embassy-executor/tests/ui/not_async.stderr b/embassy-executor/tests/ui/not_async.stderr new file mode 100644 index 000000000..27f040d9c --- /dev/null +++ b/embassy-executor/tests/ui/not_async.stderr | |||
| @@ -0,0 +1,5 @@ | |||
| 1 | error: task functions must be async | ||
| 2 | --> tests/ui/not_async.rs:6:1 | ||
| 3 | | | ||
| 4 | 6 | fn task() {} | ||
| 5 | | ^^^^^^^^^ | ||
diff --git a/embassy-executor/tests/ui/self.rs b/embassy-executor/tests/ui/self.rs new file mode 100644 index 000000000..f83a962d1 --- /dev/null +++ b/embassy-executor/tests/ui/self.rs | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | #![cfg_attr(feature = "nightly", feature(impl_trait_in_assoc_type))] | ||
| 2 | |||
| 3 | struct Foo<'a>(&'a ()); | ||
| 4 | |||
| 5 | #[embassy_executor::task] | ||
| 6 | async fn task(self) {} | ||
| 7 | |||
| 8 | fn main() {} | ||
diff --git a/embassy-executor/tests/ui/self.stderr b/embassy-executor/tests/ui/self.stderr new file mode 100644 index 000000000..aaf031573 --- /dev/null +++ b/embassy-executor/tests/ui/self.stderr | |||
| @@ -0,0 +1,13 @@ | |||
| 1 | error: task functions must not have `self` arguments | ||
| 2 | --> tests/ui/self.rs:6:15 | ||
| 3 | | | ||
| 4 | 6 | async fn task(self) {} | ||
| 5 | | ^^^^ | ||
| 6 | |||
| 7 | error: `self` parameter is only allowed in associated functions | ||
| 8 | --> tests/ui/self.rs:6:15 | ||
| 9 | | | ||
| 10 | 6 | async fn task(self) {} | ||
| 11 | | ^^^^ not semantically valid as function parameter | ||
| 12 | | | ||
| 13 | = note: associated functions are those in `impl` or `trait` definitions | ||
diff --git a/embassy-executor/tests/ui/self_ref.rs b/embassy-executor/tests/ui/self_ref.rs new file mode 100644 index 000000000..5e49bba5e --- /dev/null +++ b/embassy-executor/tests/ui/self_ref.rs | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | #![cfg_attr(feature = "nightly", feature(impl_trait_in_assoc_type))] | ||
| 2 | |||
| 3 | struct Foo<'a>(&'a ()); | ||
| 4 | |||
| 5 | #[embassy_executor::task] | ||
| 6 | async fn task(&mut self) {} | ||
| 7 | |||
| 8 | fn main() {} | ||
diff --git a/embassy-executor/tests/ui/self_ref.stderr b/embassy-executor/tests/ui/self_ref.stderr new file mode 100644 index 000000000..dd2052977 --- /dev/null +++ b/embassy-executor/tests/ui/self_ref.stderr | |||
| @@ -0,0 +1,13 @@ | |||
| 1 | error: task functions must not have `self` arguments | ||
| 2 | --> tests/ui/self_ref.rs:6:15 | ||
| 3 | | | ||
| 4 | 6 | async fn task(&mut self) {} | ||
| 5 | | ^^^^^^^^^ | ||
| 6 | |||
| 7 | error: `self` parameter is only allowed in associated functions | ||
| 8 | --> tests/ui/self_ref.rs:6:15 | ||
| 9 | | | ||
| 10 | 6 | async fn task(&mut self) {} | ||
| 11 | | ^^^^^^^^^ not semantically valid as function parameter | ||
| 12 | | | ||
| 13 | = note: associated functions are those in `impl` or `trait` definitions | ||
diff --git a/embassy-executor/tests/ui/where_clause.rs b/embassy-executor/tests/ui/where_clause.rs new file mode 100644 index 000000000..848d78149 --- /dev/null +++ b/embassy-executor/tests/ui/where_clause.rs | |||
| @@ -0,0 +1,12 @@ | |||
| 1 | #![cfg_attr(feature = "nightly", feature(impl_trait_in_assoc_type))] | ||
| 2 | |||
| 3 | struct Foo<'a>(&'a ()); | ||
| 4 | |||
| 5 | #[embassy_executor::task] | ||
| 6 | async fn task() | ||
| 7 | where | ||
| 8 | (): Sized, | ||
| 9 | { | ||
| 10 | } | ||
| 11 | |||
| 12 | fn main() {} | ||
diff --git a/embassy-executor/tests/ui/where_clause.stderr b/embassy-executor/tests/ui/where_clause.stderr new file mode 100644 index 000000000..eba45af40 --- /dev/null +++ b/embassy-executor/tests/ui/where_clause.stderr | |||
| @@ -0,0 +1,7 @@ | |||
| 1 | error: task functions must not have `where` clauses | ||
| 2 | --> tests/ui/where_clause.rs:6:1 | ||
| 3 | | | ||
| 4 | 6 | / async fn task() | ||
| 5 | 7 | | where | ||
| 6 | 8 | | (): Sized, | ||
| 7 | | |______________^ | ||
