diff --git a/src/librustc/hir/lowering.rs b/src/librustc/hir/lowering.rs index 55dcb16c3c95f..e8969e7e3cb12 100644 --- a/src/librustc/hir/lowering.rs +++ b/src/librustc/hir/lowering.rs @@ -3365,7 +3365,7 @@ impl<'a> LoweringContext<'a> { match *v { Visibility::Public => hir::Public, Visibility::Crate(..) => hir::Visibility::Crate, - Visibility::Restricted { ref path, id } => { + Visibility::Restricted { ref path, id, .. } => { hir::Visibility::Restricted { path: P(self.lower_path(id, path, ParamMode::Explicit, true)), id: if let Some(owner) = explicit_owner { diff --git a/src/librustc_resolve/lib.rs b/src/librustc_resolve/lib.rs index 2da4bfedd3a17..37016ee9cf93b 100644 --- a/src/librustc_resolve/lib.rs +++ b/src/librustc_resolve/lib.rs @@ -3802,7 +3802,7 @@ impl<'a> Resolver<'a> { ast::Visibility::Inherited => { ty::Visibility::Restricted(self.current_module.normal_ancestor_id) } - ast::Visibility::Restricted { ref path, id } => { + ast::Visibility::Restricted { ref path, id, .. } => { let def = self.smart_resolve_path(id, None, path, PathSource::Visibility).base_def(); if def == Def::Err { diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs index c7ab6158256ba..54b6e166e390f 100644 --- a/src/libsyntax/ast.rs +++ b/src/libsyntax/ast.rs @@ -1941,7 +1941,7 @@ pub enum CrateSugar { pub enum Visibility { Public, Crate(Span, CrateSugar), - Restricted { path: P, id: NodeId }, + Restricted { path: P, id: NodeId, span: Span }, Inherited, } diff --git a/src/libsyntax/fold.rs b/src/libsyntax/fold.rs index 921ed3565a471..9e51379a9ee5f 100644 --- a/src/libsyntax/fold.rs +++ b/src/libsyntax/fold.rs @@ -1368,9 +1368,10 @@ pub fn noop_fold_stmt_kind(node: StmtKind, folder: &mut T) -> SmallVe pub fn noop_fold_vis(vis: Visibility, folder: &mut T) -> Visibility { match vis { - Visibility::Restricted { path, id } => Visibility::Restricted { + Visibility::Restricted { path, id, span } => Visibility::Restricted { path: path.map(|path| folder.fold_path(path)), - id: folder.new_id(id) + id: folder.new_id(id), + span: folder.new_span(span), }, _ => vis, } diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index effc5f75f6ad6..230c0bff91764 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -5710,8 +5710,12 @@ impl<'a> Parser<'a> { self.bump(); // `(` self.bump(); // `in` let path = self.parse_path(PathStyle::Mod)?.default_to_global(); // `path` - let vis = Visibility::Restricted { path: P(path), id: ast::DUMMY_NODE_ID }; self.expect(&token::CloseDelim(token::Paren))?; // `)` + let vis = Visibility::Restricted { + path: P(path), + id: ast::DUMMY_NODE_ID, + span: self.prev_span, + }; return Ok(vis) } else if self.look_ahead(2, |t| t == &token::CloseDelim(token::Paren)) && self.look_ahead(1, |t| t.is_keyword(keywords::Super) || @@ -5720,8 +5724,12 @@ impl<'a> Parser<'a> { // `pub(self)` or `pub(super)` self.bump(); // `(` let path = self.parse_path(PathStyle::Mod)?.default_to_global(); // `super`/`self` - let vis = Visibility::Restricted { path: P(path), id: ast::DUMMY_NODE_ID }; self.expect(&token::CloseDelim(token::Paren))?; // `)` + let vis = Visibility::Restricted { + path: P(path), + id: ast::DUMMY_NODE_ID, + span: self.prev_span, + }; return Ok(vis) } else if !can_take_tuple { // Provide this diagnostic if this is not a tuple struct // `pub(something) fn ...` or `struct X { pub(something) y: Z }` diff --git a/src/libsyntax/visit.rs b/src/libsyntax/visit.rs index bbb123dab2868..14679a9ebd141 100644 --- a/src/libsyntax/visit.rs +++ b/src/libsyntax/visit.rs @@ -811,7 +811,7 @@ pub fn walk_arm<'a, V: Visitor<'a>>(visitor: &mut V, arm: &'a Arm) { } pub fn walk_vis<'a, V: Visitor<'a>>(visitor: &mut V, vis: &'a Visibility) { - if let Visibility::Restricted { ref path, id } = *vis { + if let Visibility::Restricted { ref path, id, .. } = *vis { visitor.visit_path(path, id); } }