From 1aa43af37018f285544b234d65b24efb465d18cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Esteban=20K=C3=BCber?= Date: Sat, 9 Mar 2019 15:14:22 -0800 Subject: [PATCH] parse full visibility when recovering --- src/libsyntax/parse/parser.rs | 14 +++++++++----- src/test/ui/issues/issue-28433.rs | 4 +++- src/test/ui/issues/issue-28433.stderr | 8 +++++++- 3 files changed, 19 insertions(+), 7 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(), + } } } } diff --git a/src/test/ui/issues/issue-28433.rs b/src/test/ui/issues/issue-28433.rs index 229b334a596..2bbb32bf2b3 100644 --- a/src/test/ui/issues/issue-28433.rs +++ b/src/test/ui/issues/issue-28433.rs @@ -3,7 +3,9 @@ enum Bird { pub Duck, //~^ ERROR unnecessary visibility qualifier - Goose + Goose, + pub(crate) Dove + //~^ ERROR unnecessary visibility qualifier } diff --git a/src/test/ui/issues/issue-28433.stderr b/src/test/ui/issues/issue-28433.stderr index 51be15a3e31..cfdbf6c7287 100644 --- a/src/test/ui/issues/issue-28433.stderr +++ b/src/test/ui/issues/issue-28433.stderr @@ -4,5 +4,11 @@ error: unnecessary visibility qualifier LL | pub Duck, | ^^^ `pub` not permitted here -error: aborting due to previous error +error: unnecessary visibility qualifier + --> $DIR/issue-28433.rs:7:5 + | +LL | pub(crate) Dove + | ^^^^^^^^^^ `pub` not permitted here + +error: aborting due to 2 previous errors