diff options
| author | Alexey Shmalko <rasen.dubi@gmail.com> | 2019-04-17 14:01:57 +0300 |
|---|---|---|
| committer | Alexey Shmalko <rasen.dubi@gmail.com> | 2019-04-17 15:30:15 +0300 |
| commit | dfc08610850bc05a3bc31699b592d789a3c71911 (patch) | |
| tree | a8f28377767edd6333c88863e6657b5b51d85936 | |
| parent | 258e3b3a75a0da006cd492307fc46ef605e774ad (diff) | |
| download | rust-dfc08610850bc05a3bc31699b592d789a3c71911.tar.gz rust-dfc08610850bc05a3bc31699b592d789a3c71911.zip | |
Make assert! ensure the macro is parsed completely
| -rw-r--r-- | src/libsyntax_ext/assert.rs | 11 | ||||
| -rw-r--r-- | src/test/ui/macros/assert-trailing-junk.rs | 14 | ||||
| -rw-r--r-- | src/test/ui/macros/assert-trailing-junk.stderr | 22 |
3 files changed, 45 insertions, 2 deletions
diff --git a/src/libsyntax_ext/assert.rs b/src/libsyntax_ext/assert.rs index d2c397e0ecc..f1974ed30f6 100644 --- a/src/libsyntax_ext/assert.rs +++ b/src/libsyntax_ext/assert.rs @@ -74,7 +74,7 @@ fn parse_assert<'a>( return Err(err); } - Ok(Assert { + let assert = Assert { cond_expr: parser.parse_expr()?, custom_message: if parser.eat(&token::Comma) { let ts = parser.parse_tokens(); @@ -86,5 +86,12 @@ fn parse_assert<'a>( } else { None }, - }) + }; + + if parser.token != token::Eof { + parser.expect_one_of(&[], &[])?; + unreachable!(); + } + + Ok(assert) } diff --git a/src/test/ui/macros/assert-trailing-junk.rs b/src/test/ui/macros/assert-trailing-junk.rs new file mode 100644 index 00000000000..66de6de3ee8 --- /dev/null +++ b/src/test/ui/macros/assert-trailing-junk.rs @@ -0,0 +1,14 @@ +// Ensure assert macro does not ignore trailing garbage. +// +// See https://github.com/rust-lang/rust/issues/60024 for details. + +fn main() { + assert!(true some extra junk, "whatever"); + //~^ ERROR expected one of + + assert!(true some extra junk); + //~^ ERROR expected one of + + assert!(true, "whatever" blah); + //~^ ERROR no rules expected +} diff --git a/src/test/ui/macros/assert-trailing-junk.stderr b/src/test/ui/macros/assert-trailing-junk.stderr new file mode 100644 index 00000000000..3f7d8dcaf79 --- /dev/null +++ b/src/test/ui/macros/assert-trailing-junk.stderr @@ -0,0 +1,22 @@ +error: expected one of `,`, `.`, `?`, or an operator, found `some` + --> $DIR/assert-trailing-junk.rs:6:18 + | +LL | assert!(true some extra junk, "whatever"); + | ^^^^ expected one of `,`, `.`, `?`, or an operator here + +error: expected one of `,`, `.`, `?`, or an operator, found `some` + --> $DIR/assert-trailing-junk.rs:9:18 + | +LL | assert!(true some extra junk); + | ^^^^ expected one of `,`, `.`, `?`, or an operator here + +error: no rules expected the token `blah` + --> $DIR/assert-trailing-junk.rs:12:30 + | +LL | assert!(true, "whatever" blah); + | -^^^^ no rules expected this token in macro call + | | + | help: missing comma here + +error: aborting due to 3 previous errors + |
