fallback visibility for unexpected trait item

This commit is contained in:
bohan 2024-01-04 02:02:57 +08:00
parent 2e79c8deb0
commit 862368db9f
4 changed files with 50 additions and 1 deletions

View File

@ -3076,7 +3076,16 @@ fn check_trait_item<F>(
}
let feed_visibility = |this: &mut Self, def_id| {
let vis = this.r.tcx.visibility(def_id).expect_local();
let vis = this.r.tcx.visibility(def_id);
let vis = if vis.is_visible_locally() {
vis.expect_local()
} else {
this.r.dcx().span_delayed_bug(
span,
"error should be emitted when an unexpected trait item is used",
);
rustc_middle::ty::Visibility::Public
};
this.r.feed_visibility(this.r.local_def_id(id), vis);
};

View File

@ -0,0 +1,3 @@
trait PrivateTrait {
const FOO: usize;
}

View File

@ -0,0 +1,15 @@
// aux-build:issue-119463-extern.rs
extern crate issue_119463_extern;
struct S;
impl issue_119463_extern::PrivateTrait for S {
//~^ ERROR: trait `PrivateTrait` is private
const FOO: usize = 1;
fn nonexistent() {}
//~^ ERROR: method `nonexistent` is not a member of trait
}
fn main() {}

View File

@ -0,0 +1,22 @@
error[E0407]: method `nonexistent` is not a member of trait `issue_119463_extern::PrivateTrait`
--> $DIR/issue-119463.rs:11:5
|
LL | fn nonexistent() {}
| ^^^^^^^^^^^^^^^^^^^ not a member of trait `issue_119463_extern::PrivateTrait`
error[E0603]: trait `PrivateTrait` is private
--> $DIR/issue-119463.rs:7:27
|
LL | impl issue_119463_extern::PrivateTrait for S {
| ^^^^^^^^^^^^ private trait
|
note: the trait `PrivateTrait` is defined here
--> $DIR/auxiliary/issue-119463-extern.rs:1:1
|
LL | trait PrivateTrait {
| ^^^^^^^^^^^^^^^^^^
error: aborting due to 2 previous errors
Some errors have detailed explanations: E0407, E0603.
For more information about an error, try `rustc --explain E0407`.