Revert "Auto merge of #92007 - oli-obk:lazy_tait2, r=nikomatsakis"
This reverts commite7cc3bddbe
, reversing changes made to734368a200
.
This commit is contained in:
parent
2d8b8f3593
commit
d54195db22
359 changed files with 2448 additions and 3311 deletions
|
@ -11,7 +11,7 @@ use rustc_middle::mir::*;
|
|||
use rustc_middle::ty::cast::CastTy;
|
||||
use rustc_middle::ty::subst::{GenericArgKind, InternalSubsts};
|
||||
use rustc_middle::ty::{self, adjustment::PointerCast, Instance, InstanceDef, Ty, TyCtxt};
|
||||
use rustc_middle::ty::{Binder, TraitPredicate, TraitRef, TypeFoldable};
|
||||
use rustc_middle::ty::{Binder, TraitPredicate, TraitRef};
|
||||
use rustc_mir_dataflow::{self, Analysis};
|
||||
use rustc_span::{sym, Span, Symbol};
|
||||
use rustc_trait_selection::traits::SelectionContext;
|
||||
|
@ -46,10 +46,7 @@ impl<'mir, 'tcx> Qualifs<'mir, 'tcx> {
|
|||
location: Location,
|
||||
) -> bool {
|
||||
let ty = ccx.body.local_decls[local].ty;
|
||||
// Peeking into opaque types causes cycles if the current function declares said opaque
|
||||
// type. Thus we avoid short circuiting on the type and instead run the more expensive
|
||||
// analysis that looks at the actual usage within this function
|
||||
if !ty.has_opaque_types() && !NeedsDrop::in_any_value_of_ty(ccx, ty) {
|
||||
if !NeedsDrop::in_any_value_of_ty(ccx, ty) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -103,10 +100,7 @@ impl<'mir, 'tcx> Qualifs<'mir, 'tcx> {
|
|||
location: Location,
|
||||
) -> bool {
|
||||
let ty = ccx.body.local_decls[local].ty;
|
||||
// Peeking into opaque types causes cycles if the current function declares said opaque
|
||||
// type. Thus we avoid short circuiting on the type and instead run the more expensive
|
||||
// analysis that looks at the actual usage within this function
|
||||
if !ty.has_opaque_types() && !HasMutInterior::in_any_value_of_ty(ccx, ty) {
|
||||
if !HasMutInterior::in_any_value_of_ty(ccx, ty) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -154,12 +148,7 @@ impl<'mir, 'tcx> Qualifs<'mir, 'tcx> {
|
|||
|
||||
// If we know that all values of the return type are structurally matchable, there's no
|
||||
// need to run dataflow.
|
||||
// Opaque types do not participate in const generics or pattern matching, so we can safely count them out.
|
||||
_ if ccx.body.return_ty().has_opaque_types()
|
||||
|| !CustomEq::in_any_value_of_ty(ccx, ccx.body.return_ty()) =>
|
||||
{
|
||||
false
|
||||
}
|
||||
_ if !CustomEq::in_any_value_of_ty(ccx, ccx.body.return_ty()) => false,
|
||||
|
||||
hir::ConstContext::Const | hir::ConstContext::Static(_) => {
|
||||
let mut cursor = FlowSensitiveAnalysis::new(CustomEq, ccx)
|
||||
|
@ -406,7 +395,6 @@ impl<'mir, 'tcx> Checker<'mir, 'tcx> {
|
|||
| ty::PredicateKind::Projection(_)
|
||||
| ty::PredicateKind::ConstEvaluatable(..)
|
||||
| ty::PredicateKind::ConstEquate(..)
|
||||
| ty::PredicateKind::OpaqueType(..)
|
||||
| ty::PredicateKind::TypeWellFormedFromEnv(..) => continue,
|
||||
ty::PredicateKind::ObjectSafe(_) => {
|
||||
bug!("object safe predicate on function: {:#?}", predicate)
|
||||
|
|
|
@ -79,6 +79,7 @@ pub fn equal_up_to_regions<'tcx>(
|
|||
}
|
||||
|
||||
// Normalize lifetimes away on both sides, then compare.
|
||||
let param_env = param_env.with_reveal_all_normalized(tcx);
|
||||
let normalize = |ty: Ty<'tcx>| {
|
||||
tcx.normalize_erasing_regions(
|
||||
param_env,
|
||||
|
@ -170,7 +171,9 @@ impl<'a, 'tcx> TypeChecker<'a, 'tcx> {
|
|||
return true;
|
||||
}
|
||||
// Normalize projections and things like that.
|
||||
let param_env = self.param_env;
|
||||
// FIXME: We need to reveal_all, as some optimizations change types in ways
|
||||
// that require unfolding opaque types.
|
||||
let param_env = self.param_env.with_reveal_all_normalized(self.tcx);
|
||||
let src = self.tcx.normalize_erasing_regions(param_env, src);
|
||||
let dest = self.tcx.normalize_erasing_regions(param_env, dest);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue