Skip to content

Commit 7a5aae2

Browse files
committed
stop feed vis when cant access for trait item
1 parent 2e79c8d commit 7a5aae2

File tree

4 files changed

+38
-1
lines changed

4 files changed

+38
-1
lines changed

compiler/rustc_resolve/src/late.rs

+9-1
Original file line numberDiff line numberDiff line change
@@ -3092,7 +3092,15 @@ impl<'a: 'ast, 'b, 'ast, 'tcx> LateResolutionVisitor<'a, 'b, 'ast, 'tcx> {
30923092

30933093
let res = binding.res();
30943094
let Res::Def(def_kind, id_in_trait) = res else { bug!() };
3095-
feed_visibility(self, id_in_trait);
3095+
3096+
if !self.r.is_accessible_from(binding.vis, self.parent_scope.module) {
3097+
self.r.dcx().span_delayed_bug(
3098+
span,
3099+
"privacy error should be emitted when a private trait is used",
3100+
);
3101+
} else {
3102+
feed_visibility(self, id_in_trait);
3103+
}
30963104

30973105
match seen_trait_items.entry(id_in_trait) {
30983106
Entry::Occupied(entry) => {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
trait PrivateTrait {
2+
const FOO: usize;
3+
}

tests/ui/privacy/issue-119463.rs

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
// aux-build:issue-119463-extern.rs
2+
3+
extern crate issue_119463_extern;
4+
5+
struct S;
6+
7+
impl issue_119463_extern::PrivateTrait for S { //~ ERROR: trait `PrivateTrait` is private
8+
const FOO: usize = 1;
9+
}
10+
11+
fn main() {}

tests/ui/privacy/issue-119463.stderr

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
error[E0603]: trait `PrivateTrait` is private
2+
--> $DIR/issue-119463.rs:7:27
3+
|
4+
LL | impl issue_119463_extern::PrivateTrait for S {
5+
| ^^^^^^^^^^^^ private trait
6+
|
7+
note: the trait `PrivateTrait` is defined here
8+
--> $DIR/auxiliary/issue-119463-extern.rs:1:1
9+
|
10+
LL | trait PrivateTrait {
11+
| ^^^^^^^^^^^^^^^^^^
12+
13+
error: aborting due to 1 previous error
14+
15+
For more information about this error, try `rustc --explain E0603`.

0 commit comments

Comments
 (0)