about summary refs log tree commit diff
path: root/src/libsyntax/parse
diff options
context:
space:
mode:
authorEsteban Küber <esteban@kuber.com.ar>2019-03-09 15:14:22 -0800
committerEsteban Küber <esteban@kuber.com.ar>2019-03-16 17:47:57 -0700
commit1aa43af37018f285544b234d65b24efb465d18cb (patch)
tree4340918c78915f7baea36a750e4655c6506591fd /src/libsyntax/parse
parentb2b9555f95851cd24bcda6801a41ad9a1dfa4ae7 (diff)
downloadrust-1aa43af37018f285544b234d65b24efb465d18cb.tar.gz
rust-1aa43af37018f285544b234d65b24efb465d18cb.zip
parse full visibility when recovering
Diffstat (limited to 'src/libsyntax/parse')
-rw-r--r--src/libsyntax/parse/parser.rs14
1 files changed, 9 insertions, 5 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs
index ce643545e71..0ec8cb51fa7 100644
--- a/src/libsyntax/parse/parser.rs
+++ b/src/libsyntax/parse/parser.rs
@@ -8623,11 +8623,15 @@ impl<'a> Parser<'a> {
     /// Recover from `pub` keyword in places where it seems _reasonable_ but isn't valid.
     fn eat_bad_pub(&mut self) {
         if self.token.is_keyword(keywords::Pub) {
-            self.bump();
-            let mut err = self.diagnostic()
-                .struct_span_err(self.prev_span, "unnecessary visibility qualifier");
-            err.span_label(self.prev_span, "`pub` not permitted here");
-            err.emit();
+            match self.parse_visibility(false) {
+                Ok(vis) => {
+                    let mut err = self.diagnostic()
+                        .struct_span_err(vis.span, "unnecessary visibility qualifier");
+                    err.span_label(vis.span, "`pub` not permitted here");
+                    err.emit();
+                }
+                Err(mut err) => err.emit(),
+            }
         }
     }
 }