update/add tests

This commit is contained in:
mark 2019-01-15 11:31:49 -06:00
parent 6046be42ab
commit dabe86db44
3 changed files with 183 additions and 8 deletions

View File

@ -1,37 +1,59 @@
#![allow(unused_macros)]
// Tests that repetition matchers cannot match the empty token tree (since that would be
// ambiguous).
// edition:2018
macro_rules! foo {
( $()* ) => {};
//~^ ERROR repetition matches empty token tree
( $()+ ) => {};
//~^ ERROR repetition matches empty token tree
( $()? ) => {};
//~^ ERROR repetition matches empty token tree
( $(),* ) => {}; // PASS
( $(),+ ) => {}; // PASS
// `?` cannot have a separator...
( [$()*] ) => {};
//~^ ERROR repetition matches empty token tree
( [$()+] ) => {};
//~^ ERROR repetition matches empty token tree
( [$()?] ) => {};
//~^ ERROR repetition matches empty token tree
( [$(),*] ) => {}; // PASS
( [$(),+] ) => {}; // PASS
// `?` cannot have a separator...
( $($()* $(),* $(a)* $(a),* )* ) => {};
//~^ ERROR repetition matches empty token tree
( $($()* $(),* $(a)* $(a),* )+ ) => {};
//~^ ERROR repetition matches empty token tree
( $($()* $(),* $(a)* $(a),* )? ) => {};
//~^ ERROR repetition matches empty token tree
( $($()? $(),* $(a)? $(a),* )* ) => {};
//~^ ERROR repetition matches empty token tree
( $($()? $(),* $(a)? $(a),* )+ ) => {};
//~^ ERROR repetition matches empty token tree
( $($()? $(),* $(a)? $(a),* )? ) => {};
//~^ ERROR repetition matches empty token tree
( $(a $(),* $(a)* $(a),* )* ) => {}; // PASS
( $($(a)+ $(),* $(a)* $(a),* )+ ) => {}; // PASS
( $($(a)+ $(),* $(a)* $(a),* )? ) => {}; // PASS
( $(a $(),* $(a)? $(a),* )* ) => {}; // PASS
( $($(a)+ $(),* $(a)? $(a),* )+ ) => {}; // PASS
( $($(a)+ $(),* $(a)? $(a),* )? ) => {}; // PASS
( $(a $()+)* ) => {};
//~^ ERROR repetition matches empty token tree
( $(a $()*)+ ) => {};
//~^ ERROR repetition matches empty token tree
( $(a $()+)? ) => {};
//~^ ERROR repetition matches empty token tree
( $(a $()?)+ ) => {};
//~^ ERROR repetition matches empty token tree
}
// --- Original Issue --- //
macro_rules! make_vec {
@ -43,11 +65,10 @@ fn main() {
let _ = make_vec![a 1, a 2, a 3];
}
// --- Minified Issue --- //
macro_rules! m {
( $()* ) => {}
( $()* ) => {};
//~^ ERROR repetition matches empty token tree
}

View File

@ -0,0 +1,80 @@
// Regression test for #57597.
//
// Make sure that nested matchers work correctly rather than causing an infinite loop or crash.
// edition:2018
macro_rules! foo1 {
($($($i:ident)?)+) => {};
//~^ ERROR repetition matches empty token tree
}
macro_rules! foo2 {
($($($i:ident)?)*) => {};
//~^ ERROR repetition matches empty token tree
}
macro_rules! foo3 {
($($($i:ident)?)?) => {};
//~^ ERROR repetition matches empty token tree
}
macro_rules! foo4 {
($($($($i:ident)?)?)?) => {};
//~^ ERROR repetition matches empty token tree
}
macro_rules! foo5 {
($($($($i:ident)*)?)?) => {};
//~^ ERROR repetition matches empty token tree
}
macro_rules! foo6 {
($($($($i:ident)?)*)?) => {};
//~^ ERROR repetition matches empty token tree
}
macro_rules! foo7 {
($($($($i:ident)?)?)*) => {};
//~^ ERROR repetition matches empty token tree
}
macro_rules! foo8 {
($($($($i:ident)*)*)?) => {};
//~^ ERROR repetition matches empty token tree
}
macro_rules! foo9 {
($($($($i:ident)?)*)*) => {};
//~^ ERROR repetition matches empty token tree
}
macro_rules! foo10 {
($($($($i:ident)?)*)+) => {};
//~^ ERROR repetition matches empty token tree
}
macro_rules! foo11 {
($($($($i:ident)+)?)*) => {};
//~^ ERROR repetition matches empty token tree
}
macro_rules! foo12 {
($($($($i:ident)+)*)?) => {};
//~^ ERROR repetition matches empty token tree
}
fn main() {
foo1!();
foo2!();
foo3!();
foo4!();
foo5!();
foo6!();
foo7!();
foo8!();
foo9!();
foo10!();
foo11!();
foo12!();
}

View File

@ -0,0 +1,74 @@
error: repetition matches empty token tree
--> $DIR/issue-57597.rs:8:7
|
LL | ($($($i:ident)?)+) => {};
| ^^^^^^^^^^^^^^
error: repetition matches empty token tree
--> $DIR/issue-57597.rs:13:7
|
LL | ($($($i:ident)?)*) => {};
| ^^^^^^^^^^^^^^
error: repetition matches empty token tree
--> $DIR/issue-57597.rs:18:7
|
LL | ($($($i:ident)?)?) => {};
| ^^^^^^^^^^^^^^
error: repetition matches empty token tree
--> $DIR/issue-57597.rs:23:7
|
LL | ($($($($i:ident)?)?)?) => {};
| ^^^^^^^^^^^^^^^^^^
error: repetition matches empty token tree
--> $DIR/issue-57597.rs:28:7
|
LL | ($($($($i:ident)*)?)?) => {};
| ^^^^^^^^^^^^^^^^^^
error: repetition matches empty token tree
--> $DIR/issue-57597.rs:33:7
|
LL | ($($($($i:ident)?)*)?) => {};
| ^^^^^^^^^^^^^^^^^^
error: repetition matches empty token tree
--> $DIR/issue-57597.rs:38:7
|
LL | ($($($($i:ident)?)?)*) => {};
| ^^^^^^^^^^^^^^^^^^
error: repetition matches empty token tree
--> $DIR/issue-57597.rs:43:7
|
LL | ($($($($i:ident)*)*)?) => {};
| ^^^^^^^^^^^^^^^^^^
error: repetition matches empty token tree
--> $DIR/issue-57597.rs:48:7
|
LL | ($($($($i:ident)?)*)*) => {};
| ^^^^^^^^^^^^^^^^^^
error: repetition matches empty token tree
--> $DIR/issue-57597.rs:53:7
|
LL | ($($($($i:ident)?)*)+) => {};
| ^^^^^^^^^^^^^^^^^^
error: repetition matches empty token tree
--> $DIR/issue-57597.rs:58:7
|
LL | ($($($($i:ident)+)?)*) => {};
| ^^^^^^^^^^^^^^^^^^
error: repetition matches empty token tree
--> $DIR/issue-57597.rs:63:7
|
LL | ($($($($i:ident)+)*)?) => {};
| ^^^^^^^^^^^^^^^^^^
error: aborting due to 12 previous errors