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) {
|
||||
Ok(result) => return Ok(result),
|
||||
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