mirror of
https://github.com/rtic-rs/rtic.git
synced 2024-11-23 20:22:51 +01:00
Merge #159
159: reject duplicate arguments in #[interrupt] and #[exception] r=TeXitoi a=japaric This program was being accepted: ``` rust #[task( capacity = 1, capacity = 2, priority = 1, priority = 2, )] fn foo() {} ``` now it will trigger a compiler error r? @korken89 || @TeXitoi Co-authored-by: Jorge Aparicio <jorge@japaric.io>
This commit is contained in:
commit
bbdc3221f6
3 changed files with 62 additions and 0 deletions
|
@ -937,6 +937,13 @@ fn parse_args(input: ParseStream<'_>, accept_capacity: bool) -> parse::Result<Ta
|
||||||
let ident_s = ident.to_string();
|
let ident_s = ident.to_string();
|
||||||
match &*ident_s {
|
match &*ident_s {
|
||||||
"capacity" if accept_capacity => {
|
"capacity" if accept_capacity => {
|
||||||
|
if capacity.is_some() {
|
||||||
|
return Err(parse::Error::new(
|
||||||
|
ident.span(),
|
||||||
|
"argument appears more than once",
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
// #lit
|
// #lit
|
||||||
let lit: LitInt = content.parse()?;
|
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);
|
capacity = Some(value as u8);
|
||||||
}
|
}
|
||||||
"priority" => {
|
"priority" => {
|
||||||
|
if priority.is_some() {
|
||||||
|
return Err(parse::Error::new(
|
||||||
|
ident.span(),
|
||||||
|
"argument appears more than once",
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
// #lit
|
// #lit
|
||||||
let lit: LitInt = content.parse()?;
|
let lit: LitInt = content.parse()?;
|
||||||
|
|
||||||
|
|
24
tests/cfail/duplicate-args-2.rs
Normal file
24
tests/cfail/duplicate-args-2.rs
Normal file
|
@ -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();
|
||||||
|
}
|
||||||
|
};
|
24
tests/cfail/duplicate-args.rs
Normal file
24
tests/cfail/duplicate-args.rs
Normal file
|
@ -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();
|
||||||
|
}
|
||||||
|
};
|
Loading…
Reference in a new issue