Don't check unsize goal in MIR validation when opaques remain
This commit is contained in:
parent
e7c0d27507
commit
c7730989de
@ -595,6 +595,17 @@ fn predicate_must_hold_modulo_regions(
|
||||
&self,
|
||||
pred: impl Upcast<TyCtxt<'tcx>, ty::Predicate<'tcx>>,
|
||||
) -> bool {
|
||||
let pred: ty::Predicate<'tcx> = pred.upcast(self.tcx);
|
||||
|
||||
// We sometimes have to use `defining_opaque_types` for predicates
|
||||
// to succeed here and figuring out how exactly that should work
|
||||
// is annoying. It is harmless enough to just not validate anything
|
||||
// in that case. We still check this after analysis as all opaque
|
||||
// types have been revealed at this point.
|
||||
if pred.has_opaque_types() {
|
||||
return true;
|
||||
}
|
||||
|
||||
let infcx = self.tcx.infer_ctxt().build();
|
||||
let ocx = ObligationCtxt::new(&infcx);
|
||||
ocx.register_obligation(Obligation::new(
|
||||
|
@ -1,10 +0,0 @@
|
||||
//@ known-bug: #130921
|
||||
//@ compile-flags: -Zvalidate-mir -Copt-level=0 --crate-type lib
|
||||
|
||||
pub fn hello() -> [impl Sized; 2] {
|
||||
if false {
|
||||
let x = hello();
|
||||
let _: &[i32] = &x;
|
||||
}
|
||||
todo!()
|
||||
}
|
12
tests/ui/impl-trait/unsize-cast-validation-rpit.rs
Normal file
12
tests/ui/impl-trait/unsize-cast-validation-rpit.rs
Normal file
@ -0,0 +1,12 @@
|
||||
//@ check-pass
|
||||
//@ compile-flags: -Zvalidate-mir
|
||||
|
||||
fn hello() -> &'static [impl Sized; 0] {
|
||||
if false {
|
||||
let x = hello();
|
||||
let _: &[i32] = x;
|
||||
}
|
||||
&[]
|
||||
}
|
||||
|
||||
fn main() {}
|
Loading…
Reference in New Issue
Block a user