mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 14:55:26 +00:00
Don't try to label ObligationCauseCode::CompareImplItem for an RPITIT, since it has no name
This commit is contained in:
parent
8a8ad3433e
commit
d6276b37ea
@ -3472,6 +3472,10 @@ impl<'a, 'tcx> TypeErrCtxt<'a, 'tcx> {
|
|||||||
)
|
)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
// Suppress `compare_type_predicate_entailment` errors for RPITITs, since they
|
||||||
|
// should be implied by the parent method.
|
||||||
|
ObligationCauseCode::CompareImplItem { trait_item_def_id, .. }
|
||||||
|
if tcx.is_impl_trait_in_trait(trait_item_def_id) => {}
|
||||||
ObligationCauseCode::CompareImplItem { trait_item_def_id, kind, .. } => {
|
ObligationCauseCode::CompareImplItem { trait_item_def_id, kind, .. } => {
|
||||||
let item_name = tcx.item_name(trait_item_def_id);
|
let item_name = tcx.item_name(trait_item_def_id);
|
||||||
let msg = format!(
|
let msg = format!(
|
||||||
|
@ -1,24 +0,0 @@
|
|||||||
//@ known-bug: rust-lang/rust#125099
|
|
||||||
|
|
||||||
pub trait ContFn<T>: Fn(T) -> Self::Future {
|
|
||||||
type Future;
|
|
||||||
}
|
|
||||||
impl<T, F> ContFn<T> for F
|
|
||||||
where
|
|
||||||
F: Fn(T),
|
|
||||||
{
|
|
||||||
type Future = ();
|
|
||||||
}
|
|
||||||
|
|
||||||
pub trait SeqHandler {
|
|
||||||
type Requires;
|
|
||||||
fn process<F: ContFn<Self::Requires>>() -> impl Sized;
|
|
||||||
}
|
|
||||||
|
|
||||||
pub struct ConvertToU64;
|
|
||||||
impl SeqHandler for ConvertToU64 {
|
|
||||||
type Requires = u64;
|
|
||||||
fn process<F: ContFn<Self::Requires>>() -> impl Sized {}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn main() {}
|
|
@ -0,0 +1,173 @@
|
|||||||
|
error[E0277]: the trait bound `F: MyFn<i32>` is not satisfied
|
||||||
|
--> $DIR/false-positive-predicate-entailment-error.rs:36:5
|
||||||
|
|
|
||||||
|
LL | / fn autobatch<F>(self) -> impl Trait
|
||||||
|
LL | |
|
||||||
|
LL | |
|
||||||
|
LL | |
|
||||||
|
... |
|
||||||
|
LL | | where
|
||||||
|
LL | | F: Callback<Self::CallbackArg>,
|
||||||
|
| |_______________________________________^ the trait `MyFn<i32>` is not implemented for `F`, which is required by `F: Callback<i32>`
|
||||||
|
|
|
||||||
|
note: required for `F` to implement `Callback<i32>`
|
||||||
|
--> $DIR/false-positive-predicate-entailment-error.rs:14:21
|
||||||
|
|
|
||||||
|
LL | impl<A, F: MyFn<A>> Callback<A> for F {
|
||||||
|
| ------- ^^^^^^^^^^^ ^
|
||||||
|
| |
|
||||||
|
| unsatisfied trait bound introduced here
|
||||||
|
help: consider further restricting this bound
|
||||||
|
|
|
||||||
|
LL | F: Callback<Self::CallbackArg> + MyFn<i32>,
|
||||||
|
| +++++++++++
|
||||||
|
|
||||||
|
error[E0277]: the trait bound `F: MyFn<i32>` is not satisfied
|
||||||
|
--> $DIR/false-positive-predicate-entailment-error.rs:36:30
|
||||||
|
|
|
||||||
|
LL | fn autobatch<F>(self) -> impl Trait
|
||||||
|
| ^^^^^^^^^^ the trait `MyFn<i32>` is not implemented for `F`, which is required by `F: Callback<i32>`
|
||||||
|
|
|
||||||
|
note: required for `F` to implement `Callback<i32>`
|
||||||
|
--> $DIR/false-positive-predicate-entailment-error.rs:14:21
|
||||||
|
|
|
||||||
|
LL | impl<A, F: MyFn<A>> Callback<A> for F {
|
||||||
|
| ------- ^^^^^^^^^^^ ^
|
||||||
|
| |
|
||||||
|
| unsatisfied trait bound introduced here
|
||||||
|
note: required by a bound in `<Sender as ChannelSender>::autobatch`
|
||||||
|
--> $DIR/false-positive-predicate-entailment-error.rs:43:12
|
||||||
|
|
|
||||||
|
LL | fn autobatch<F>(self) -> impl Trait
|
||||||
|
| --------- required by a bound in this associated function
|
||||||
|
...
|
||||||
|
LL | F: Callback<Self::CallbackArg>,
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `<Sender as ChannelSender>::autobatch`
|
||||||
|
help: consider further restricting this bound
|
||||||
|
|
|
||||||
|
LL | F: Callback<Self::CallbackArg> + MyFn<i32>,
|
||||||
|
| +++++++++++
|
||||||
|
|
||||||
|
error[E0277]: the trait bound `F: MyFn<i32>` is not satisfied
|
||||||
|
--> $DIR/false-positive-predicate-entailment-error.rs:36:5
|
||||||
|
|
|
||||||
|
LL | / fn autobatch<F>(self) -> impl Trait
|
||||||
|
LL | |
|
||||||
|
LL | |
|
||||||
|
LL | |
|
||||||
|
... |
|
||||||
|
LL | | where
|
||||||
|
LL | | F: Callback<Self::CallbackArg>,
|
||||||
|
| |_______________________________________^ the trait `MyFn<i32>` is not implemented for `F`, which is required by `F: Callback<i32>`
|
||||||
|
|
|
||||||
|
note: required for `F` to implement `Callback<i32>`
|
||||||
|
--> $DIR/false-positive-predicate-entailment-error.rs:14:21
|
||||||
|
|
|
||||||
|
LL | impl<A, F: MyFn<A>> Callback<A> for F {
|
||||||
|
| ------- ^^^^^^^^^^^ ^
|
||||||
|
| |
|
||||||
|
| unsatisfied trait bound introduced here
|
||||||
|
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||||
|
help: consider further restricting this bound
|
||||||
|
|
|
||||||
|
LL | F: Callback<Self::CallbackArg> + MyFn<i32>,
|
||||||
|
| +++++++++++
|
||||||
|
|
||||||
|
error[E0277]: the trait bound `F: Callback<i32>` is not satisfied
|
||||||
|
--> $DIR/false-positive-predicate-entailment-error.rs:43:12
|
||||||
|
|
|
||||||
|
LL | F: Callback<Self::CallbackArg>,
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `MyFn<i32>` is not implemented for `F`, which is required by `F: Callback<i32>`
|
||||||
|
|
|
||||||
|
note: required for `F` to implement `Callback<i32>`
|
||||||
|
--> $DIR/false-positive-predicate-entailment-error.rs:14:21
|
||||||
|
|
|
||||||
|
LL | impl<A, F: MyFn<A>> Callback<A> for F {
|
||||||
|
| ------- ^^^^^^^^^^^ ^
|
||||||
|
| |
|
||||||
|
| unsatisfied trait bound introduced here
|
||||||
|
note: the requirement `F: Callback<i32>` appears on the `impl`'s method `autobatch` but not on the corresponding trait's method
|
||||||
|
--> $DIR/false-positive-predicate-entailment-error.rs:25:8
|
||||||
|
|
|
||||||
|
LL | trait ChannelSender {
|
||||||
|
| ------------- in this trait
|
||||||
|
...
|
||||||
|
LL | fn autobatch<F>(self) -> impl Trait
|
||||||
|
| ^^^^^^^^^ this trait's method doesn't have the requirement `F: Callback<i32>`
|
||||||
|
help: consider further restricting this bound
|
||||||
|
|
|
||||||
|
LL | F: Callback<Self::CallbackArg> + MyFn<i32>,
|
||||||
|
| +++++++++++
|
||||||
|
|
||||||
|
error[E0277]: the trait bound `F: MyFn<i32>` is not satisfied
|
||||||
|
--> $DIR/false-positive-predicate-entailment-error.rs:36:30
|
||||||
|
|
|
||||||
|
LL | fn autobatch<F>(self) -> impl Trait
|
||||||
|
| ^^^^^^^^^^ the trait `MyFn<i32>` is not implemented for `F`, which is required by `F: Callback<i32>`
|
||||||
|
|
|
||||||
|
note: required for `F` to implement `Callback<i32>`
|
||||||
|
--> $DIR/false-positive-predicate-entailment-error.rs:14:21
|
||||||
|
|
|
||||||
|
LL | impl<A, F: MyFn<A>> Callback<A> for F {
|
||||||
|
| ------- ^^^^^^^^^^^ ^
|
||||||
|
| |
|
||||||
|
| unsatisfied trait bound introduced here
|
||||||
|
|
||||||
|
error[E0277]: the trait bound `F: Callback<i32>` is not satisfied
|
||||||
|
--> $DIR/false-positive-predicate-entailment-error.rs:27:12
|
||||||
|
|
|
||||||
|
LL | F: Callback<Self::CallbackArg>;
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `MyFn<i32>` is not implemented for `F`, which is required by `F: Callback<i32>`
|
||||||
|
|
|
||||||
|
note: required for `F` to implement `Callback<i32>`
|
||||||
|
--> $DIR/false-positive-predicate-entailment-error.rs:14:21
|
||||||
|
|
|
||||||
|
LL | impl<A, F: MyFn<A>> Callback<A> for F {
|
||||||
|
| ------- ^^^^^^^^^^^ ^
|
||||||
|
| |
|
||||||
|
| unsatisfied trait bound introduced here
|
||||||
|
|
||||||
|
error[E0277]: the trait bound `F: MyFn<i32>` is not satisfied
|
||||||
|
--> $DIR/false-positive-predicate-entailment-error.rs:36:5
|
||||||
|
|
|
||||||
|
LL | / fn autobatch<F>(self) -> impl Trait
|
||||||
|
LL | |
|
||||||
|
LL | |
|
||||||
|
LL | |
|
||||||
|
... |
|
||||||
|
LL | | where
|
||||||
|
LL | | F: Callback<Self::CallbackArg>,
|
||||||
|
| |_______________________________________^ the trait `MyFn<i32>` is not implemented for `F`, which is required by `F: Callback<i32>`
|
||||||
|
|
|
||||||
|
note: required for `F` to implement `Callback<i32>`
|
||||||
|
--> $DIR/false-positive-predicate-entailment-error.rs:14:21
|
||||||
|
|
|
||||||
|
LL | impl<A, F: MyFn<A>> Callback<A> for F {
|
||||||
|
| ------- ^^^^^^^^^^^ ^
|
||||||
|
| |
|
||||||
|
| unsatisfied trait bound introduced here
|
||||||
|
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||||
|
help: consider further restricting this bound
|
||||||
|
|
|
||||||
|
LL | F: Callback<Self::CallbackArg> + MyFn<i32>,
|
||||||
|
| +++++++++++
|
||||||
|
|
||||||
|
error[E0277]: the trait bound `F: MyFn<i32>` is not satisfied
|
||||||
|
--> $DIR/false-positive-predicate-entailment-error.rs:43:12
|
||||||
|
|
|
||||||
|
LL | F: Callback<Self::CallbackArg>,
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `MyFn<i32>` is not implemented for `F`
|
||||||
|
|
|
||||||
|
note: required by a bound in `Callback`
|
||||||
|
--> $DIR/false-positive-predicate-entailment-error.rs:10:20
|
||||||
|
|
|
||||||
|
LL | trait Callback<A>: MyFn<A, Output = Self::Ret> {
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `Callback`
|
||||||
|
help: consider further restricting this bound
|
||||||
|
|
|
||||||
|
LL | F: Callback<Self::CallbackArg> + MyFn<i32>,
|
||||||
|
| +++++++++++
|
||||||
|
|
||||||
|
error: aborting due to 8 previous errors
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0277`.
|
@ -0,0 +1,51 @@
|
|||||||
|
//@ revisions: current next
|
||||||
|
//@ ignore-compare-mode-next-solver (explicit revisions)
|
||||||
|
//@[next] compile-flags: -Znext-solver
|
||||||
|
//@[next] check-pass
|
||||||
|
|
||||||
|
trait MyFn<T> {
|
||||||
|
type Output;
|
||||||
|
}
|
||||||
|
|
||||||
|
trait Callback<A>: MyFn<A, Output = Self::Ret> {
|
||||||
|
type Ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<A, F: MyFn<A>> Callback<A> for F {
|
||||||
|
type Ret = F::Output;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Thing;
|
||||||
|
trait Trait {}
|
||||||
|
impl Trait for Thing {}
|
||||||
|
|
||||||
|
trait ChannelSender {
|
||||||
|
type CallbackArg;
|
||||||
|
|
||||||
|
fn autobatch<F>(self) -> impl Trait
|
||||||
|
where
|
||||||
|
F: Callback<Self::CallbackArg>;
|
||||||
|
//[current]~^ ERROR the trait bound `F: Callback<i32>` is not satisfied
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Sender;
|
||||||
|
|
||||||
|
impl ChannelSender for Sender {
|
||||||
|
type CallbackArg = i32;
|
||||||
|
|
||||||
|
fn autobatch<F>(self) -> impl Trait
|
||||||
|
//[current]~^ ERROR the trait bound `F: MyFn<i32>` is not satisfied
|
||||||
|
//[current]~| ERROR the trait bound `F: MyFn<i32>` is not satisfied
|
||||||
|
//[current]~| ERROR the trait bound `F: MyFn<i32>` is not satisfied
|
||||||
|
//[current]~| ERROR the trait bound `F: MyFn<i32>` is not satisfied
|
||||||
|
//[current]~| ERROR the trait bound `F: MyFn<i32>` is not satisfied
|
||||||
|
where
|
||||||
|
F: Callback<Self::CallbackArg>,
|
||||||
|
//[current]~^ ERROR the trait bound `F: Callback<i32>` is not satisfied
|
||||||
|
//[current]~| ERROR the trait bound `F: MyFn<i32>` is not satisfied
|
||||||
|
{
|
||||||
|
Thing
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
Loading…
Reference in New Issue
Block a user