Skip to content

Commit 9503c56

Browse files
committed
privacy: Mark everything in a header of a reachable impl as reachable
1 parent 67713f5 commit 9503c56

File tree

6 files changed

+36
-9
lines changed

6 files changed

+36
-9
lines changed

src/librustc_privacy/lib.rs

+8-1
Original file line numberDiff line numberDiff line change
@@ -552,7 +552,7 @@ impl<'a, 'tcx> Visitor<'tcx> for EmbargoVisitor<'a, 'tcx> {
552552
// Visit everything except for private impl items.
553553
hir::ItemKind::Impl(.., ref impl_item_refs) => {
554554
if item_level.is_some() {
555-
self.reach(item.id, item_level).generics().predicates();
555+
self.reach(item.id, item_level).generics().predicates().ty().trait_ref();
556556

557557
for impl_item_ref in impl_item_refs {
558558
let impl_item_level = self.get(impl_item_ref.id.node_id);
@@ -711,6 +711,13 @@ impl<'a, 'tcx> ReachEverythingInTheInterfaceVisitor<'_, 'a, 'tcx> {
711711
self.visit(self.ev.tcx.type_of(self.item_def_id));
712712
self
713713
}
714+
715+
fn trait_ref(&mut self) -> &mut Self {
716+
if let Some(trait_ref) = self.ev.tcx.impl_trait_ref(self.item_def_id) {
717+
self.visit_trait(trait_ref);
718+
}
719+
self
720+
}
714721
}
715722

716723
impl<'a, 'tcx> DefIdVisitor<'a, 'tcx> for ReachEverythingInTheInterfaceVisitor<'_, 'a, 'tcx> {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
mod inner {
2+
pub struct PubUnnameable;
3+
4+
impl PubUnnameable {
5+
pub fn pub_method(self) {}
6+
}
7+
}
8+
9+
pub trait PubTraitWithSingleImplementor {}
10+
impl PubTraitWithSingleImplementor for Option<inner::PubUnnameable> {}

src/test/ui/privacy/issue-57264-1.rs

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// compile-pass
2+
// aux-build:issue-57264-1.rs
3+
4+
extern crate issue_57264_1;
5+
6+
fn main() {
7+
issue_57264_1::Pub::pub_method();
8+
}

src/test/ui/privacy/issue-57264-2.rs

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// compile-pass
2+
// aux-build:issue-57264-2.rs
3+
4+
extern crate issue_57264_2;
5+
6+
fn infer<T: issue_57264_2::PubTraitWithSingleImplementor>(arg: T) -> T { arg }
7+
8+
fn main() {
9+
infer(None).unwrap().pub_method();
10+
}

src/test/ui/privacy/issue-57264.rs

-8
This file was deleted.

0 commit comments

Comments
 (0)