use rustc::hir::def_id::{CRATE_DEF_INDEX, LOCAL_CRATE, DefId};
use rustc::ty;
use rustc::middle::cstore::CrateStore;
-use rustc_metadata::cstore::LoadedMacro;
+use rustc_metadata::creader::LoadedMacro;
use std::cell::Cell;
use std::ptr;
use syntax::ast::{Name, Ident};
use syntax::attr;
-
use syntax::ast::{self, Block, ForeignItem, ForeignItemKind, Item, ItemKind, NodeId};
use syntax::ast::{MetaItemKind, StmtKind, TraitItem, TraitItemKind};
-use syntax::feature_gate::is_builtin_attr;
use syntax::token::{self, Token};
use syntax::print::pprust;
use syntax::{span_err, struct_span_err};
// Record field names for error reporting.
let field_names = struct_def.fields().iter().map(|field| {
+ // NOTE: The field may be an expansion placeholder, but expansion sets correct
+ // visibilities for unnamed field placeholders specifically, so the constructor
+ // visibility should still be determined correctly.
let field_vis = self.resolve_visibility(&field.vis);
if ctor_vis.is_at_least(field_vis, &*self.r) {
ctor_vis = field_vis;
}
fn visit_attribute(&mut self, attr: &'b ast::Attribute) {
- if !attr.is_doc_comment() && is_builtin_attr(attr) {
+ if !attr.is_doc_comment() && attr::is_builtin_attr(attr) {
self.r.builtin_attrs.push(
(attr.get_normal_item().path.segments[0].ident, self.parent_scope)
);