Also passthrough for projection clauses
This commit is contained in:
parent
b0c1474381
commit
44040a0670
@ -460,7 +460,9 @@ fn visit_goal(&mut self, goal: &inspect::InspectGoal<'_, 'tcx>) -> Self::Result
|
|||||||
polarity: ty::PredicatePolarity::Positive,
|
polarity: ty::PredicatePolarity::Positive,
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
ty::PredicateKind::Clause(ty::ClauseKind::WellFormed(_))
|
ty::PredicateKind::Clause(
|
||||||
|
ty::ClauseKind::WellFormed(_) | ty::ClauseKind::Projection(..),
|
||||||
|
)
|
||||||
| ty::PredicateKind::AliasRelate(..) => ChildMode::PassThrough,
|
| ty::PredicateKind::AliasRelate(..) => ChildMode::PassThrough,
|
||||||
_ => {
|
_ => {
|
||||||
return ControlFlow::Break(self.obligation.clone());
|
return ControlFlow::Break(self.obligation.clone());
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
error[E0284]: type annotations needed: cannot satisfy `for<'a> <_ as Trait<'a>>::Assoc <: <T as Trait<'_>>::Assoc`
|
error[E0284]: type annotations needed: cannot satisfy `for<'a> <_ as Trait<'a>>::Assoc normalizes-to <T as Trait<'_>>::Assoc`
|
||||||
--> $DIR/rigid-equate-projections-in-higher-ranked-fn-signature.rs:27:50
|
--> $DIR/rigid-equate-projections-in-higher-ranked-fn-signature.rs:27:50
|
||||||
|
|
|
|
||||||
LL | let _: for<'a> fn(<_ as Trait<'a>>::Assoc) = foo::<T>();
|
LL | let _: for<'a> fn(<_ as Trait<'a>>::Assoc) = foo::<T>();
|
||||||
| ^^^^^^^^^^ cannot satisfy `for<'a> <_ as Trait<'a>>::Assoc <: <T as Trait<'_>>::Assoc`
|
| ^^^^^^^^^^ cannot satisfy `for<'a> <_ as Trait<'a>>::Assoc normalizes-to <T as Trait<'_>>::Assoc`
|
||||||
|
|
||||||
error: aborting due to 1 previous error
|
error: aborting due to 1 previous error
|
||||||
|
|
||||||
|
@ -2,13 +2,8 @@ error[E0271]: type mismatch resolving `<T as Foo>::Assoc == i32`
|
|||||||
--> $DIR/param-candidate-shadows-project.rs:27:19
|
--> $DIR/param-candidate-shadows-project.rs:27:19
|
||||||
|
|
|
|
||||||
LL | require_bar::<T>();
|
LL | require_bar::<T>();
|
||||||
| ^ type mismatch resolving `<T as Foo>::Assoc == i32`
|
| ^ types differ
|
||||||
|
|
|
|
||||||
note: types differ
|
|
||||||
--> $DIR/param-candidate-shadows-project.rs:10:18
|
|
||||||
|
|
|
||||||
LL | type Assoc = i32;
|
|
||||||
| ^^^
|
|
||||||
note: required for `T` to implement `Bar`
|
note: required for `T` to implement `Bar`
|
||||||
--> $DIR/param-candidate-shadows-project.rs:13:9
|
--> $DIR/param-candidate-shadows-project.rs:13:9
|
||||||
|
|
|
|
||||||
|
@ -24,7 +24,7 @@ fn needs_bar<T: Bar>() {}
|
|||||||
|
|
||||||
fn foo<T: Foo<Assoc = i32> + Foo<Assoc = u32>>() {
|
fn foo<T: Foo<Assoc = i32> + Foo<Assoc = u32>>() {
|
||||||
needs_bar::<T>();
|
needs_bar::<T>();
|
||||||
//~^ ERROR type annotations needed: cannot satisfy `<T as Foo>::Assoc == i32`
|
//~^ ERROR type annotations needed: cannot normalize
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {}
|
fn main() {}
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
error[E0284]: type annotations needed: cannot satisfy `<T as Foo>::Assoc == i32`
|
error[E0284]: type annotations needed: cannot normalize `<T as Foo>::Assoc`
|
||||||
--> $DIR/two-projection-param-candidates-are-ambiguous.rs:26:17
|
--> $DIR/two-projection-param-candidates-are-ambiguous.rs:26:17
|
||||||
|
|
|
|
||||||
LL | needs_bar::<T>();
|
LL | needs_bar::<T>();
|
||||||
| ^ cannot satisfy `<T as Foo>::Assoc == i32`
|
| ^ cannot normalize `<T as Foo>::Assoc`
|
||||||
|
|
|
|
||||||
note: required for `T` to implement `Bar`
|
note: required for `T` to implement `Bar`
|
||||||
--> $DIR/two-projection-param-candidates-are-ambiguous.rs:21:9
|
--> $DIR/two-projection-param-candidates-are-ambiguous.rs:21:9
|
||||||
|
@ -22,11 +22,11 @@ error[E0284]: type annotations needed: cannot satisfy `<T as Default>::Id normal
|
|||||||
LL | self
|
LL | self
|
||||||
| ^^^^ cannot satisfy `<T as Default>::Id normalizes-to T`
|
| ^^^^ cannot satisfy `<T as Default>::Id normalizes-to T`
|
||||||
|
|
||||||
error[E0284]: type annotations needed: cannot satisfy `<u8 as Default>::Id == Option<NonZero<u8>>`
|
error[E0284]: type annotations needed: cannot satisfy `<u8 as Default>::Id normalizes-to Option<NonZero<u8>>`
|
||||||
--> $DIR/specialization-transmute.rs:28:13
|
--> $DIR/specialization-transmute.rs:28:13
|
||||||
|
|
|
|
||||||
LL | let s = transmute::<u8, Option<NonZero<u8>>>(0);
|
LL | let s = transmute::<u8, Option<NonZero<u8>>>(0);
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot satisfy `<u8 as Default>::Id == Option<NonZero<u8>>`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot satisfy `<u8 as Default>::Id normalizes-to Option<NonZero<u8>>`
|
||||||
|
|
|
|
||||||
note: required by a bound in `transmute`
|
note: required by a bound in `transmute`
|
||||||
--> $DIR/specialization-transmute.rs:21:25
|
--> $DIR/specialization-transmute.rs:21:25
|
||||||
|
@ -18,5 +18,5 @@ fn test<T: Default<Id = U>, U>() {}
|
|||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
test::<u32, ()>();
|
test::<u32, ()>();
|
||||||
//~^ ERROR cannot satisfy `<u32 as Default>::Id == ()`
|
//~^ ERROR cannot satisfy `<u32 as Default>::Id normalizes-to ()`
|
||||||
}
|
}
|
||||||
|
@ -8,11 +8,11 @@ LL | #![feature(specialization)]
|
|||||||
= help: consider using `min_specialization` instead, which is more stable and complete
|
= help: consider using `min_specialization` instead, which is more stable and complete
|
||||||
= note: `#[warn(incomplete_features)]` on by default
|
= note: `#[warn(incomplete_features)]` on by default
|
||||||
|
|
||||||
error[E0284]: type annotations needed: cannot satisfy `<u32 as Default>::Id == ()`
|
error[E0284]: type annotations needed: cannot satisfy `<u32 as Default>::Id normalizes-to ()`
|
||||||
--> $DIR/specialization-unconstrained.rs:20:5
|
--> $DIR/specialization-unconstrained.rs:20:5
|
||||||
|
|
|
|
||||||
LL | test::<u32, ()>();
|
LL | test::<u32, ()>();
|
||||||
| ^^^^^^^^^^^^^^^^^ cannot satisfy `<u32 as Default>::Id == ()`
|
| ^^^^^^^^^^^^^^^^^ cannot satisfy `<u32 as Default>::Id normalizes-to ()`
|
||||||
|
|
|
|
||||||
note: required by a bound in `test`
|
note: required by a bound in `test`
|
||||||
--> $DIR/specialization-unconstrained.rs:17:20
|
--> $DIR/specialization-unconstrained.rs:17:20
|
||||||
|
@ -20,7 +20,7 @@ trait Trait<T, In> {
|
|||||||
impl<In, Out> Trait<Bar, In> for Out {
|
impl<In, Out> Trait<Bar, In> for Out {
|
||||||
type Out = Out;
|
type Out = Out;
|
||||||
fn convert(_i: In) -> Self::Out {
|
fn convert(_i: In) -> Self::Out {
|
||||||
//[next]~^ ERROR: cannot satisfy `<Out as Trait<Bar, In>>::Out == ()`
|
//[next]~^ ERROR: cannot satisfy `Bar == _`
|
||||||
//[current]~^^ ERROR: item does not constrain `Bar::{opaque#0}`, but has it in its signature
|
//[current]~^^ ERROR: item does not constrain `Bar::{opaque#0}`, but has it in its signature
|
||||||
unreachable!();
|
unreachable!();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user