diff options
| author | ouz-a <ouz.agz@gmail.com> | 2023-09-30 13:44:31 +0300 |
|---|---|---|
| committer | ouz-a <ouz.agz@gmail.com> | 2023-10-02 23:39:45 +0300 |
| commit | 6f0c5ee2d4c9ced0fa9d0e698b6a136cfdc51949 (patch) | |
| tree | 05afaa338500fa567cd03f17f45e5e77b483252a /compiler/rustc_const_eval/src/transform/validate.rs | |
| parent | cd7f47193182d1d557a83593bcff6afe0568fc53 (diff) | |
| download | rust-6f0c5ee2d4c9ced0fa9d0e698b6a136cfdc51949.tar.gz rust-6f0c5ee2d4c9ced0fa9d0e698b6a136cfdc51949.zip | |
change is_subtype to relate_types
Diffstat (limited to 'compiler/rustc_const_eval/src/transform/validate.rs')
| -rw-r--r-- | compiler/rustc_const_eval/src/transform/validate.rs | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/compiler/rustc_const_eval/src/transform/validate.rs b/compiler/rustc_const_eval/src/transform/validate.rs index 6a5a3628617..4711f7b47cc 100644 --- a/compiler/rustc_const_eval/src/transform/validate.rs +++ b/compiler/rustc_const_eval/src/transform/validate.rs @@ -7,7 +7,7 @@ use rustc_infer::traits::Reveal; use rustc_middle::mir::interpret::Scalar; use rustc_middle::mir::visit::{NonUseContext, PlaceContext, Visitor}; use rustc_middle::mir::*; -use rustc_middle::ty::{self, InstanceDef, ParamEnv, Ty, TyCtxt, TypeVisitableExt}; +use rustc_middle::ty::{self, InstanceDef, ParamEnv, Ty, TyCtxt, TypeVisitableExt, Variance}; use rustc_mir_dataflow::impls::MaybeStorageLive; use rustc_mir_dataflow::storage::always_storage_live_locals; use rustc_mir_dataflow::{Analysis, ResultsCursor}; @@ -16,7 +16,7 @@ use rustc_target::spec::abi::Abi; use crate::util::is_within_packed; -use crate::util::is_subtype; +use crate::util::relate_types; #[derive(Copy, Clone, Debug, PartialEq, Eq)] enum EdgeKind { @@ -604,7 +604,15 @@ impl<'a, 'tcx> TypeChecker<'a, 'tcx> { return true; } - return crate::util::is_subtype(self.tcx, self.param_env, src, dest); + // After borrowck subtyping should be fully explicit via + // `Subtype` projections. + let variance = if self.mir_phase >= MirPhase::Runtime(RuntimePhase::Initial) { + Variance::Invariant + } else { + Variance::Covariant + }; + + crate::util::relate_types(self.tcx, self.param_env, variance, src, dest) } } @@ -756,9 +764,10 @@ impl<'a, 'tcx> Visitor<'tcx> for TypeChecker<'a, 'tcx> { } } ProjectionElem::Subtype(ty) => { - if !is_subtype( + if !relate_types( self.tcx, self.param_env, + Variance::Covariant, ty, place_ref.ty(&self.body.local_decls, self.tcx).ty, ) { |
