Skip to content

Commit

Permalink
update/add tests
Browse files Browse the repository at this point in the history
  • Loading branch information
mark-i-m committed Jan 15, 2019
1 parent 6046be4 commit dabe86d
Show file tree
Hide file tree
Showing 3 changed files with 183 additions and 8 deletions.
37 changes: 29 additions & 8 deletions src/test/ui/issues/issue-5067.rs
Original file line number Diff line number Diff line change
@@ -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 {
Expand All @@ -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
}

Expand Down
80 changes: 80 additions & 0 deletions src/test/ui/issues/issue-57597.rs
Original file line number Diff line number Diff line change
@@ -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!();
}
74 changes: 74 additions & 0 deletions src/test/ui/issues/issue-57597.stderr
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit dabe86d

Please sign in to comment.