mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 14:55:26 +00:00
Auto merge of #116273 - compiler-errors:refine2, r=tmandry
Only trigger `refining_impl_trait` lint on reachable traits
Public but unreachable traits don't matter 😸
r? `@tmandry`
This commit is contained in:
commit
5236c8e1fa
@ -23,8 +23,12 @@ pub(super) fn check_refining_return_position_impl_trait_in_trait<'tcx>(
|
||||
if !tcx.impl_method_has_trait_impl_trait_tys(impl_m.def_id) {
|
||||
return;
|
||||
}
|
||||
// crate-private traits don't have any library guarantees, there's no need to do this check.
|
||||
if !tcx.visibility(trait_m.container_id(tcx)).is_public() {
|
||||
// unreachable traits don't have any library guarantees, there's no need to do this check.
|
||||
if trait_m
|
||||
.container_id(tcx)
|
||||
.as_local()
|
||||
.is_some_and(|trait_def_id| !tcx.effective_visibilities(()).is_reachable(trait_def_id))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -7,6 +7,12 @@ LL | async fn foo(_: T) -> &'static str;
|
||||
LL | impl<T> MyTrait<T> for MyStruct {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ missing `foo` in implementation
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/missing-feature-flag.rs:16:42
|
||||
|
|
||||
LL | async fn foo(_: i32) -> &'static str {}
|
||||
| ^^ expected `&str`, found `()`
|
||||
|
||||
error[E0520]: `foo` specializes an item from a parent `impl`, but that item is not marked `default`
|
||||
--> $DIR/missing-feature-flag.rs:16:5
|
||||
|
|
||||
@ -18,12 +24,6 @@ LL | async fn foo(_: i32) -> &'static str {}
|
||||
|
|
||||
= note: to specialize, `foo` in the parent `impl` must be marked `default`
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/missing-feature-flag.rs:16:42
|
||||
|
|
||||
LL | async fn foo(_: i32) -> &'static str {}
|
||||
| ^^ expected `&str`, found `()`
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0046, E0308, E0520.
|
||||
|
@ -45,4 +45,15 @@ impl Late for D {
|
||||
//~^ ERROR impl method signature does not match trait method signature
|
||||
}
|
||||
|
||||
mod unreachable {
|
||||
pub trait UnreachablePub {
|
||||
fn bar() -> impl Sized;
|
||||
}
|
||||
|
||||
struct E;
|
||||
impl UnreachablePub for E {
|
||||
fn bar() {}
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
Loading…
Reference in New Issue
Block a user