about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAlexey Shmalko <rasen.dubi@gmail.com>2019-04-17 14:01:57 +0300
committerAlexey Shmalko <rasen.dubi@gmail.com>2019-04-17 15:30:15 +0300
commitdfc08610850bc05a3bc31699b592d789a3c71911 (patch)
treea8f28377767edd6333c88863e6657b5b51d85936
parent258e3b3a75a0da006cd492307fc46ef605e774ad (diff)
downloadrust-dfc08610850bc05a3bc31699b592d789a3c71911.tar.gz
rust-dfc08610850bc05a3bc31699b592d789a3c71911.zip
Make assert! ensure the macro is parsed completely
-rw-r--r--src/libsyntax_ext/assert.rs11
-rw-r--r--src/test/ui/macros/assert-trailing-junk.rs14
-rw-r--r--src/test/ui/macros/assert-trailing-junk.stderr22
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
+