Rollup merge of #133323 - compiler-errors:bail-if-self-var, r=lcnr
Bail in effects in old solver if self ty is ty var Otherwise when we try to check something like `?t: ~const Trait` we'll immediately stick it to the first param-env candidate, lol. r? lcnr
This commit is contained in:
commit
74b8522855
2 changed files with 21 additions and 0 deletions
|
@ -27,6 +27,11 @@ pub fn evaluate_host_effect_obligation<'tcx>(
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Force ambiguity for infer self ty.
|
||||||
|
if obligation.predicate.self_ty().is_ty_var() {
|
||||||
|
return Err(EvaluationFailure::Ambiguous);
|
||||||
|
}
|
||||||
|
|
||||||
match evaluate_host_effect_from_bounds(selcx, obligation) {
|
match evaluate_host_effect_from_bounds(selcx, obligation) {
|
||||||
Ok(result) => return Ok(result),
|
Ok(result) => return Ok(result),
|
||||||
Err(EvaluationFailure::Ambiguous) => return Err(EvaluationFailure::Ambiguous),
|
Err(EvaluationFailure::Ambiguous) => return Err(EvaluationFailure::Ambiguous),
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
//@ check-pass
|
||||||
|
|
||||||
|
#![feature(const_trait_impl)]
|
||||||
|
|
||||||
|
#[const_trait]
|
||||||
|
trait Foo {}
|
||||||
|
|
||||||
|
impl<T> const Foo for (T,) where T: ~const Foo {}
|
||||||
|
|
||||||
|
const fn needs_const_foo(_: impl ~const Foo + Copy) {}
|
||||||
|
|
||||||
|
const fn test<T: ~const Foo + Copy>(t: T) {
|
||||||
|
needs_const_foo((t,));
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
Loading…
Add table
Add a link
Reference in a new issue