Don't do intra-pass validation on MIR shims
This commit is contained in:
parent
ee5cb9e3a6
commit
acd3542b8d
3 changed files with 36 additions and 1 deletions
|
@ -90,7 +90,11 @@ fn make_shim<'tcx>(tcx: TyCtxt<'tcx>, instance: ty::InstanceDef<'tcx>) -> Body<'
|
||||||
};
|
};
|
||||||
debug!("make_shim({:?}) = untransformed {:?}", instance, result);
|
debug!("make_shim({:?}) = untransformed {:?}", instance, result);
|
||||||
|
|
||||||
pm::run_passes(
|
// We don't validate MIR here because the shims may generate code that's
|
||||||
|
// only valid in a reveal-all param-env. However, since we do initial
|
||||||
|
// validation with the MirBuilt phase, which uses a user-facing param-env.
|
||||||
|
// This causes validation errors when TAITs are involved.
|
||||||
|
pm::run_passes_no_validate(
|
||||||
tcx,
|
tcx,
|
||||||
&mut result,
|
&mut result,
|
||||||
&[
|
&[
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
// crate foo
|
||||||
|
|
||||||
|
#![feature(type_alias_impl_trait)]
|
||||||
|
|
||||||
|
type Tait = impl Sized;
|
||||||
|
fn _constrain() -> Tait {}
|
||||||
|
|
||||||
|
struct WrapperWithDrop<T>(T);
|
||||||
|
impl<T> Drop for WrapperWithDrop<T> {
|
||||||
|
fn drop(&mut self) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct Foo(WrapperWithDrop<Tait>);
|
||||||
|
|
||||||
|
trait Id {
|
||||||
|
type Id: ?Sized;
|
||||||
|
}
|
||||||
|
impl<T: ?Sized> Id for T {
|
||||||
|
type Id = T;
|
||||||
|
}
|
||||||
|
pub struct Bar(WrapperWithDrop<<Tait as Id>::Id>);
|
|
@ -0,0 +1,10 @@
|
||||||
|
// aux-build:drop-shim-relates-opaque-aux.rs
|
||||||
|
// compile-flags: -Zvalidate-mir --crate-type=lib
|
||||||
|
// build-pass
|
||||||
|
|
||||||
|
extern crate drop_shim_relates_opaque_aux;
|
||||||
|
|
||||||
|
pub fn drop_foo(_: drop_shim_relates_opaque_aux::Foo) {}
|
||||||
|
pub fn drop_bar(_: drop_shim_relates_opaque_aux::Bar) {}
|
||||||
|
|
||||||
|
fn main() {}
|
Loading…
Add table
Add a link
Reference in a new issue