fn should_warn_about_field(&mut self, field: &hir::StructField) -> bool {
let field_type = self.tcx.type_of(self.tcx.hir.local_def_id(field.id));
- let is_marker_field = match field_type.ty_to_def_id() {
- Some(def_id) => self.tcx.lang_items().items().iter().any(|item| *item == Some(def_id)),
- _ => false
- };
!field.is_positional()
&& !self.symbol_is_live(field.id, None)
- && !is_marker_field
+ && !field_type.is_phantom_data()
&& !has_allow_dead_code_or_lang_attr(self.tcx, field.id, &field.attrs)
}
flags.push((name, Some(value)));
}
- if let Some(true) = self_ty.ty_to_def_id().map(|def_id| def_id.is_local()) {
+ if let Some(true) = self_ty.ty_adt_def().map(|def| def.did.is_local()) {
flags.push(("crate_local".to_string(), None));
}
}
let found_trait_ty = found_trait_ref.self_ty();
- let found_did = found_trait_ty.ty_to_def_id();
+ let found_did = match found_trait_ty.sty {
+ ty::TyClosure(did, _) |
+ ty::TyForeign(did) |
+ ty::TyFnDef(did, _) => Some(did),
+ ty::TyAdt(def, _) => Some(def.did),
+ _ => None,
+ };
let found_span = found_did.and_then(|did| {
self.tcx.hir.span_if_local(did)
}).map(|sp| self.tcx.sess.codemap().def_span(sp)); // the sp could be an fn def
}
}
- pub fn ty_to_def_id(&self) -> Option<DefId> {
- match self.sty {
- TyDynamic(ref tt, ..) => tt.principal().map(|p| p.def_id()),
- TyAdt(def, _) => Some(def.did),
- TyForeign(did) => Some(did),
- TyClosure(id, _) => Some(id),
- TyFnDef(id, _) => Some(id),
- _ => None,
- }
- }
-
pub fn ty_adt_def(&self) -> Option<&'tcx AdtDef> {
match self.sty {
TyAdt(adt, _) => Some(adt),
if self.impling_types.is_none() {
let mut impls = NodeSet();
cx.tcx.for_each_impl(debug, |d| {
- if let Some(ty_def) = cx.tcx.type_of(d).ty_to_def_id() {
- if let Some(node_id) = cx.tcx.hir.as_local_node_id(ty_def) {
+ if let Some(ty_def) = cx.tcx.type_of(d).ty_adt_def() {
+ if let Some(node_id) = cx.tcx.hir.as_local_node_id(ty_def.did) {
impls.insert(node_id);
}
}