about summary refs log tree commit diff
path: root/src/libsyntax/parse/parser
diff options
context:
space:
mode:
authorMazdak Farrokhzad <twingoow@gmail.com>2019-08-27 19:51:21 +0200
committerMazdak Farrokhzad <twingoow@gmail.com>2019-08-27 19:51:21 +0200
commitdbbe3363c94b120d1eba9cba01dadddd862716b8 (patch)
tree7a1397560a9ed462b36de1e31cecc2d03f543432 /src/libsyntax/parse/parser
parentf908aa9e8000dd7fd2c3de54fe1d914fddf4fe92 (diff)
downloadrust-dbbe3363c94b120d1eba9cba01dadddd862716b8.tar.gz
rust-dbbe3363c94b120d1eba9cba01dadddd862716b8.zip
Ensure 'let mut ;' where ':pat' is banned.
Diffstat (limited to 'src/libsyntax/parse/parser')
-rw-r--r--src/libsyntax/parse/parser/pat.rs9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/libsyntax/parse/parser/pat.rs b/src/libsyntax/parse/parser/pat.rs
index 7b228a700a7..08934e85330 100644
--- a/src/libsyntax/parse/parser/pat.rs
+++ b/src/libsyntax/parse/parser/pat.rs
@@ -384,6 +384,7 @@ impl<'a> Parser<'a> {
         })
     }
 
+    /// Parse a mutable binding with the `mut` token already eaten.
     fn parse_pat_ident_mut(&mut self) -> PResult<'a, PatKind> {
         let mut_span = self.prev_span;
 
@@ -393,6 +394,14 @@ impl<'a> Parser<'a> {
 
         self.recover_additional_muts();
 
+        // Make sure we don't allow e.g. `let mut $p;` where `$p:pat`.
+        if let token::Interpolated(ref nt) = self.token.kind {
+             if let token::NtPat(_) = **nt {
+                 self.expected_ident_found().emit();
+             }
+        }
+
+        // Parse the pattern we hope to be an identifier.
         let mut pat = self.parse_pat(Some("identifier"))?;
 
         // Add `mut` to any binding in the parsed pattern.