aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--macros/src/syntax.rs14
-rw-r--r--tests/cfail/duplicate-args-2.rs24
-rw-r--r--tests/cfail/duplicate-args.rs24
3 files changed, 62 insertions, 0 deletions
diff --git a/macros/src/syntax.rs b/macros/src/syntax.rs
index 581eb83..9771ea9 100644
--- a/macros/src/syntax.rs
+++ b/macros/src/syntax.rs
@@ -937,6 +937,13 @@ fn parse_args(input: ParseStream<'_>, accept_capacity: bool) -> parse::Result<Ta
let ident_s = ident.to_string();
match &*ident_s {
"capacity" if accept_capacity => {
+ if capacity.is_some() {
+ return Err(parse::Error::new(
+ ident.span(),
+ "argument appears more than once",
+ ));
+ }
+
// #lit
let lit: LitInt = content.parse()?;
@@ -958,6 +965,13 @@ fn parse_args(input: ParseStream<'_>, accept_capacity: bool) -> parse::Result<Ta
capacity = Some(value as u8);
}
"priority" => {
+ if priority.is_some() {
+ return Err(parse::Error::new(
+ ident.span(),
+ "argument appears more than once",
+ ));
+ }
+
// #lit
let lit: LitInt = content.parse()?;
diff --git a/tests/cfail/duplicate-args-2.rs b/tests/cfail/duplicate-args-2.rs
new file mode 100644
index 0000000..1a196e9
--- /dev/null
+++ b/tests/cfail/duplicate-args-2.rs
@@ -0,0 +1,24 @@
+#![no_main]
+#![no_std]
+
+extern crate lm3s6965;
+extern crate panic_halt;
+extern crate rtfm;
+
+use rtfm::app;
+
+#[app(device = lm3s6965)]
+const APP: () = {
+ #[init]
+ fn init() {}
+
+ #[task(
+ priority = 1,
+ priority = 2, //~ ERROR argument appears more than once
+ )]
+ fn foo() {}
+
+ extern "C" {
+ fn UART0();
+ }
+};
diff --git a/tests/cfail/duplicate-args.rs b/tests/cfail/duplicate-args.rs
new file mode 100644
index 0000000..a946bae
--- /dev/null
+++ b/tests/cfail/duplicate-args.rs
@@ -0,0 +1,24 @@
+#![no_main]
+#![no_std]
+
+extern crate lm3s6965;
+extern crate panic_halt;
+extern crate rtfm;
+
+use rtfm::app;
+
+#[app(device = lm3s6965)]
+const APP: () = {
+ #[init]
+ fn init() {}
+
+ #[task(
+ capacity = 1,
+ capacity = 2, //~ ERROR argument appears more than once
+ )]
+ fn foo() {}
+
+ extern "C" {
+ fn UART0();
+ }
+};