diff --git a/src/librustc_mir/transform/validate.rs b/src/librustc_mir/transform/validate.rs index 9296e2ca7008f..0c2d4c1e93493 100644 --- a/src/librustc_mir/transform/validate.rs +++ b/src/librustc_mir/transform/validate.rs @@ -120,7 +120,8 @@ pub fn equal_up_to_regions( } // Instantiate and run relation. - let mut relator: LifetimeIgnoreRelation<'tcx> = LifetimeIgnoreRelation { tcx: tcx, param_env }; + let param_env = param_env.with_reveal_all_normalized(tcx); + let mut relator: LifetimeIgnoreRelation<'tcx> = LifetimeIgnoreRelation { tcx, param_env }; relator.relate(src, dest).is_ok() } diff --git a/src/test/ui/mir/validation_impl_trait_lifetime.rs b/src/test/ui/mir/validation_impl_trait_lifetime.rs new file mode 100644 index 0000000000000..d62ea15dc4939 --- /dev/null +++ b/src/test/ui/mir/validation_impl_trait_lifetime.rs @@ -0,0 +1,9 @@ +// check-pass +//! This used to fail MIR validation due to the types on both sides of an assignment not being equal. +fn iter_slice<'a, T>(xs: &'a [T]) -> impl Iterator { + xs.iter() +} + +fn main() { + iter_slice::<()> as fn(_) -> _; +}