Skip to content

Commit a9ab778

Browse files
committed
Auto merge of #38479 - michaelwoerister:extern_mod_ich, r=nikomatsakis
ICH: Fix and test foreign mod hashing. r? @nikomatsakis
2 parents 314c28b + f0a630b commit a9ab778

File tree

4 files changed

+307
-14
lines changed

4 files changed

+307
-14
lines changed

src/librustc/hir/intravisit.rs

+8-5
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,9 @@ pub trait Visitor<'v> : Sized {
264264
fn visit_where_predicate(&mut self, predicate: &'v WherePredicate) {
265265
walk_where_predicate(self, predicate)
266266
}
267+
fn visit_fn_decl(&mut self, fd: &'v FnDecl) {
268+
walk_fn_decl(self, fd)
269+
}
267270
fn visit_fn(&mut self, fk: FnKind<'v>, fd: &'v FnDecl, b: ExprId, s: Span, id: NodeId) {
268271
walk_fn(self, fk, fd, b, s, id)
269272
}
@@ -531,7 +534,7 @@ pub fn walk_ty<'v, V: Visitor<'v>>(visitor: &mut V, typ: &'v Ty) {
531534
walk_list!(visitor, visit_ty, tuple_element_types);
532535
}
533536
TyBareFn(ref function_declaration) => {
534-
walk_fn_decl(visitor, &function_declaration.decl);
537+
visitor.visit_fn_decl(&function_declaration.decl);
535538
walk_list!(visitor, visit_lifetime_def, &function_declaration.lifetimes);
536539
}
537540
TyPath(ref qpath) => {
@@ -660,7 +663,7 @@ pub fn walk_foreign_item<'v, V: Visitor<'v>>(visitor: &mut V, foreign_item: &'v
660663

661664
match foreign_item.node {
662665
ForeignItemFn(ref function_declaration, ref generics) => {
663-
walk_fn_decl(visitor, function_declaration);
666+
visitor.visit_fn_decl(function_declaration);
664667
visitor.visit_generics(generics)
665668
}
666669
ForeignItemStatic(ref typ, _) => visitor.visit_ty(typ),
@@ -764,7 +767,7 @@ pub fn walk_fn<'v, V: Visitor<'v>>(visitor: &mut V,
764767
_span: Span,
765768
id: NodeId) {
766769
visitor.visit_id(id);
767-
walk_fn_decl(visitor, function_declaration);
770+
visitor.visit_fn_decl(function_declaration);
768771
walk_fn_kind(visitor, function_kind);
769772
visitor.visit_body(body_id)
770773
}
@@ -776,7 +779,7 @@ pub fn walk_fn_with_body<'v, V: Visitor<'v>>(visitor: &mut V,
776779
_span: Span,
777780
id: NodeId) {
778781
visitor.visit_id(id);
779-
walk_fn_decl(visitor, function_declaration);
782+
visitor.visit_fn_decl(function_declaration);
780783
walk_fn_kind(visitor, function_kind);
781784
visitor.visit_expr(body)
782785
}
@@ -793,7 +796,7 @@ pub fn walk_trait_item<'v, V: Visitor<'v>>(visitor: &mut V, trait_item: &'v Trai
793796
MethodTraitItem(ref sig, None) => {
794797
visitor.visit_id(trait_item.id);
795798
visitor.visit_generics(&sig.generics);
796-
walk_fn_decl(visitor, &sig.decl);
799+
visitor.visit_fn_decl(&sig.decl);
797800
}
798801
MethodTraitItem(ref sig, Some(body_id)) => {
799802
visitor.visit_fn(FnKind::Method(trait_item.name,

src/librustc_incremental/calculate_svh/mod.rs

-5
Original file line numberDiff line numberDiff line change
@@ -238,9 +238,4 @@ impl<'a, 'tcx> Visitor<'tcx> for HashItemsVisitor<'a, 'tcx> {
238238
self.calculate_node_id(impl_item.id, |v| v.visit_impl_item(impl_item));
239239
visit::walk_impl_item(self, impl_item);
240240
}
241-
242-
fn visit_foreign_item(&mut self, item: &'tcx hir::ForeignItem) {
243-
self.calculate_node_id(item.id, |v| v.visit_foreign_item(item));
244-
visit::walk_foreign_item(self, item);
245-
}
246241
}

src/librustc_incremental/calculate_svh/svh_visitor.rs

+27-4
Original file line numberDiff line numberDiff line change
@@ -180,9 +180,10 @@ enum SawAbiComponent<'a> {
180180
SawLifetimeDef(usize),
181181

182182
SawMod,
183-
SawForeignItem,
183+
SawForeignItem(SawForeignItemComponent),
184184
SawItem(SawItemComponent),
185185
SawTy(SawTyComponent),
186+
SawFnDecl(bool),
186187
SawGenerics,
187188
SawTraitItem(SawTraitOrImplItemComponent),
188189
SawImplItem(SawTraitOrImplItemComponent),
@@ -363,7 +364,7 @@ enum SawItemComponent {
363364
SawItemConst,
364365
SawItemFn(Unsafety, Constness, Abi),
365366
SawItemMod,
366-
SawItemForeignMod,
367+
SawItemForeignMod(Abi),
367368
SawItemTy,
368369
SawItemEnum,
369370
SawItemStruct,
@@ -381,7 +382,7 @@ fn saw_item(node: &Item_) -> SawItemComponent {
381382
ItemConst(..) =>SawItemConst,
382383
ItemFn(_, unsafety, constness, abi, _, _) => SawItemFn(unsafety, constness, abi),
383384
ItemMod(..) => SawItemMod,
384-
ItemForeignMod(..) => SawItemForeignMod,
385+
ItemForeignMod(ref fm) => SawItemForeignMod(fm.abi),
385386
ItemTy(..) => SawItemTy,
386387
ItemEnum(..) => SawItemEnum,
387388
ItemStruct(..) => SawItemStruct,
@@ -392,6 +393,12 @@ fn saw_item(node: &Item_) -> SawItemComponent {
392393
}
393394
}
394395

396+
#[derive(Hash)]
397+
enum SawForeignItemComponent {
398+
Static { mutable: bool },
399+
Fn,
400+
}
401+
395402
#[derive(Hash)]
396403
enum SawPatComponent {
397404
SawPatWild,
@@ -641,7 +648,17 @@ impl<'a, 'hash, 'tcx> visit::Visitor<'tcx> for StrictVersionHashVisitor<'a, 'has
641648
fn visit_foreign_item(&mut self, i: &'tcx ForeignItem) {
642649
debug!("visit_foreign_item: st={:?}", self.st);
643650

644-
SawForeignItem.hash(self.st);
651+
match i.node {
652+
ForeignItemFn(..) => {
653+
SawForeignItem(SawForeignItemComponent::Fn)
654+
}
655+
ForeignItemStatic(_, mutable) => {
656+
SawForeignItem(SawForeignItemComponent::Static {
657+
mutable: mutable
658+
})
659+
}
660+
}.hash(self.st);
661+
645662
hash_span!(self, i.span);
646663
hash_attrs!(self, &i.attrs);
647664
visit::walk_foreign_item(self, i)
@@ -678,6 +695,12 @@ impl<'a, 'hash, 'tcx> visit::Visitor<'tcx> for StrictVersionHashVisitor<'a, 'has
678695
visit::walk_generics(self, g)
679696
}
680697

698+
fn visit_fn_decl(&mut self, fd: &'tcx FnDecl) {
699+
debug!("visit_fn_decl: st={:?}", self.st);
700+
SawFnDecl(fd.variadic).hash(self.st);
701+
visit::walk_fn_decl(self, fd)
702+
}
703+
681704
fn visit_trait_item(&mut self, ti: &'tcx TraitItem) {
682705
debug!("visit_trait_item: st={:?}", self.st);
683706

0 commit comments

Comments
 (0)