diff --git a/src/librustc_privacy/lib.rs b/src/librustc_privacy/lib.rs index 2f0d53f1d81b..ec97e4b8cb3f 100644 --- a/src/librustc_privacy/lib.rs +++ b/src/librustc_privacy/lib.rs @@ -552,7 +552,7 @@ impl<'a, 'tcx> Visitor<'tcx> for EmbargoVisitor<'a, 'tcx> { // Visit everything except for private impl items. hir::ItemKind::Impl(.., ref impl_item_refs) => { if item_level.is_some() { - self.reach(item.id, item_level).generics().predicates(); + self.reach(item.id, item_level).generics().predicates().ty().trait_ref(); for impl_item_ref in impl_item_refs { let impl_item_level = self.get(impl_item_ref.id.node_id); @@ -711,6 +711,13 @@ impl<'a, 'tcx> ReachEverythingInTheInterfaceVisitor<'_, 'a, 'tcx> { self.visit(self.ev.tcx.type_of(self.item_def_id)); self } + + fn trait_ref(&mut self) -> &mut Self { + if let Some(trait_ref) = self.ev.tcx.impl_trait_ref(self.item_def_id) { + self.visit_trait(trait_ref); + } + self + } } impl<'a, 'tcx> DefIdVisitor<'a, 'tcx> for ReachEverythingInTheInterfaceVisitor<'_, 'a, 'tcx> { diff --git a/src/test/ui/privacy/auxiliary/issue-57264.rs b/src/test/ui/privacy/auxiliary/issue-57264-1.rs similarity index 100% rename from src/test/ui/privacy/auxiliary/issue-57264.rs rename to src/test/ui/privacy/auxiliary/issue-57264-1.rs diff --git a/src/test/ui/privacy/auxiliary/issue-57264-2.rs b/src/test/ui/privacy/auxiliary/issue-57264-2.rs new file mode 100644 index 000000000000..416206b4f8e7 --- /dev/null +++ b/src/test/ui/privacy/auxiliary/issue-57264-2.rs @@ -0,0 +1,10 @@ +mod inner { + pub struct PubUnnameable; + + impl PubUnnameable { + pub fn pub_method(self) {} + } +} + +pub trait PubTraitWithSingleImplementor {} +impl PubTraitWithSingleImplementor for Option {} diff --git a/src/test/ui/privacy/issue-57264-1.rs b/src/test/ui/privacy/issue-57264-1.rs new file mode 100644 index 000000000000..dcffdc3d4ef8 --- /dev/null +++ b/src/test/ui/privacy/issue-57264-1.rs @@ -0,0 +1,8 @@ +// compile-pass +// aux-build:issue-57264-1.rs + +extern crate issue_57264_1; + +fn main() { + issue_57264_1::Pub::pub_method(); +} diff --git a/src/test/ui/privacy/issue-57264-2.rs b/src/test/ui/privacy/issue-57264-2.rs new file mode 100644 index 000000000000..79d0d2c7cd78 --- /dev/null +++ b/src/test/ui/privacy/issue-57264-2.rs @@ -0,0 +1,10 @@ +// compile-pass +// aux-build:issue-57264-2.rs + +extern crate issue_57264_2; + +fn infer(arg: T) -> T { arg } + +fn main() { + infer(None).unwrap().pub_method(); +} diff --git a/src/test/ui/privacy/issue-57264.rs b/src/test/ui/privacy/issue-57264.rs deleted file mode 100644 index 57e9960a058f..000000000000 --- a/src/test/ui/privacy/issue-57264.rs +++ /dev/null @@ -1,8 +0,0 @@ -// compile-pass -// aux-build:issue-57264.rs - -extern crate issue_57264; - -fn main() { - issue_57264::Pub::pub_method(); -}