Emit impl difference error for GenericBoundFailure too
This commit is contained in:
parent
1dafe6d1c3
commit
c4f9eb1e5a
@ -46,7 +46,9 @@ pub(super) fn try_report_impl_not_conforming_to_trait(&self) -> Option<ErrorRepo
|
||||
}
|
||||
}
|
||||
}
|
||||
if let RegionResolutionError::ConcreteFailure(origin, _, _) = error.clone() {
|
||||
if let RegionResolutionError::ConcreteFailure(origin, _, _)
|
||||
| RegionResolutionError::GenericBoundFailure(origin, _, _) = error.clone()
|
||||
{
|
||||
if let SubregionOrigin::CompareImplTypeObligation {
|
||||
span,
|
||||
item_name,
|
||||
|
@ -13,7 +13,7 @@ trait Foo {
|
||||
|
||||
impl<T> Foo for Fooy<T> {
|
||||
type A<'a> where Self: 'static = (&'a ());
|
||||
//~^ ERROR the parameter type `T` may not live long enough
|
||||
//~^ ERROR `impl` associated type
|
||||
type B<'a, 'b> where 'b: 'a = (&'a(), &'b ());
|
||||
//~^ ERROR `impl` associated type
|
||||
//~| ERROR lifetime bound not satisfied
|
||||
|
@ -1,11 +1,11 @@
|
||||
error[E0310]: the parameter type `T` may not live long enough
|
||||
error: `impl` associated type signature for `A` doesn't match `trait` associated type signature
|
||||
--> $DIR/impl_bounds.rs:15:5
|
||||
|
|
||||
LL | type A<'a> where Self: 'a;
|
||||
| -------------------------- expected
|
||||
...
|
||||
LL | type A<'a> where Self: 'static = (&'a ());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= help: consider adding an explicit lifetime bound `T: 'static`...
|
||||
= note: ...so that the definition in impl matches the definition from the trait
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ found
|
||||
|
||||
error: `impl` associated type signature for `B` doesn't match `trait` associated type signature
|
||||
--> $DIR/impl_bounds.rs:17:5
|
||||
@ -85,5 +85,5 @@ LL | impl<T: std::marker::Copy> Foo for Fooy<T> {
|
||||
|
||||
error: aborting due to 5 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0277, E0310, E0478.
|
||||
Some errors have detailed explanations: E0277, E0478.
|
||||
For more information about an error, try `rustc --explain E0277`.
|
||||
|
@ -21,8 +21,8 @@ impl<Left, Right> HasChildrenOf for Either<Left, Right>
|
||||
{
|
||||
type T = Either<Left::T, Right::T>;
|
||||
type TRef<'a>
|
||||
//~^ the associated type
|
||||
//~^^ the associated type
|
||||
//~^ `impl` associated type signature
|
||||
//~^^ `impl` associated type signature
|
||||
where
|
||||
<Left as HasChildrenOf>::T: 'a,
|
||||
<Right as HasChildrenOf>::T: 'a
|
||||
|
@ -1,29 +1,32 @@
|
||||
error[E0309]: the associated type `<Left as HasChildrenOf>::T` may not live long enough
|
||||
error: `impl` associated type signature for `TRef` doesn't match `trait` associated type signature
|
||||
--> $DIR/issue-86787.rs:23:5
|
||||
|
|
||||
LL | type TRef<'a>;
|
||||
| -------------- expected
|
||||
...
|
||||
LL | / type TRef<'a>
|
||||
LL | |
|
||||
LL | |
|
||||
LL | | where
|
||||
LL | | <Left as HasChildrenOf>::T: 'a,
|
||||
LL | | <Right as HasChildrenOf>::T: 'a
|
||||
| | - help: consider adding a where clause: `, <Left as HasChildrenOf>::T: 'a`
|
||||
LL | | = Either<&'a Left::T, &'a Right::T>;
|
||||
| |________________________________________^ ...so that the definition in impl matches the definition from the trait
|
||||
| |________________________________________^ found
|
||||
|
||||
error[E0309]: the associated type `<Right as HasChildrenOf>::T` may not live long enough
|
||||
error: `impl` associated type signature for `TRef` doesn't match `trait` associated type signature
|
||||
--> $DIR/issue-86787.rs:23:5
|
||||
|
|
||||
LL | type TRef<'a>;
|
||||
| -------------- expected
|
||||
...
|
||||
LL | / type TRef<'a>
|
||||
LL | |
|
||||
LL | |
|
||||
LL | | where
|
||||
LL | | <Left as HasChildrenOf>::T: 'a,
|
||||
LL | | <Right as HasChildrenOf>::T: 'a
|
||||
| | - help: consider adding a where clause: `, <Right as HasChildrenOf>::T: 'a`
|
||||
LL | | = Either<&'a Left::T, &'a Right::T>;
|
||||
| |________________________________________^ ...so that the definition in impl matches the definition from the trait
|
||||
| |________________________________________^ found
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0309`.
|
||||
|
Loading…
Reference in New Issue
Block a user