Remove rustc_transmute's dependence on rustc_infer.

`TransmuteTypeEnv` only needs a `TyCtxt`, not an `InferCtxt`.
This commit is contained in:
Nicholas Nethercote 2025-02-28 16:34:41 +11:00
parent 00f245915b
commit 5f58985f5d
6 changed files with 9 additions and 13 deletions

View file

@ -4500,7 +4500,6 @@ dependencies = [
"rustc_abi", "rustc_abi",
"rustc_data_structures", "rustc_data_structures",
"rustc_hir", "rustc_hir",
"rustc_infer",
"rustc_macros", "rustc_macros",
"rustc_middle", "rustc_middle",
"rustc_span", "rustc_span",

View file

@ -2544,7 +2544,7 @@ impl<'a, 'tcx> TypeErrCtxt<'a, 'tcx> {
let src = trait_pred.trait_ref.args.type_at(1); let src = trait_pred.trait_ref.args.type_at(1);
let err_msg = format!("`{src}` cannot be safely transmuted into `{dst}`"); let err_msg = format!("`{src}` cannot be safely transmuted into `{dst}`");
match rustc_transmute::TransmuteTypeEnv::new(self.infcx).is_transmutable( match rustc_transmute::TransmuteTypeEnv::new(self.infcx.tcx).is_transmutable(
obligation.cause, obligation.cause,
src_and_dst, src_and_dst,
assume, assume,

View file

@ -236,7 +236,7 @@ impl<'tcx> rustc_next_trait_solver::delegate::SolverDelegate for SolverDelegate<
}; };
// FIXME(transmutability): This really should be returning nested goals for `Answer::If*` // FIXME(transmutability): This really should be returning nested goals for `Answer::If*`
match rustc_transmute::TransmuteTypeEnv::new(&self.0).is_transmutable( match rustc_transmute::TransmuteTypeEnv::new(self.0.tcx).is_transmutable(
ObligationCause::dummy(), ObligationCause::dummy(),
rustc_transmute::Types { src, dst }, rustc_transmute::Types { src, dst },
assume, assume,

View file

@ -424,7 +424,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
let src = predicate.trait_ref.args.type_at(1); let src = predicate.trait_ref.args.type_at(1);
debug!(?src, ?dst); debug!(?src, ?dst);
let mut transmute_env = rustc_transmute::TransmuteTypeEnv::new(self.infcx); let mut transmute_env = rustc_transmute::TransmuteTypeEnv::new(self.infcx.tcx);
let maybe_transmutable = transmute_env.is_transmutable( let maybe_transmutable = transmute_env.is_transmutable(
obligation.cause.clone(), obligation.cause.clone(),
rustc_transmute::Types { dst, src }, rustc_transmute::Types { dst, src },

View file

@ -8,7 +8,6 @@ edition = "2024"
rustc_abi = { path = "../rustc_abi", optional = true } rustc_abi = { path = "../rustc_abi", optional = true }
rustc_data_structures = { path = "../rustc_data_structures" } rustc_data_structures = { path = "../rustc_data_structures" }
rustc_hir = { path = "../rustc_hir", optional = true } rustc_hir = { path = "../rustc_hir", optional = true }
rustc_infer = { path = "../rustc_infer", optional = true }
rustc_macros = { path = "../rustc_macros", optional = true } rustc_macros = { path = "../rustc_macros", optional = true }
rustc_middle = { path = "../rustc_middle", optional = true } rustc_middle = { path = "../rustc_middle", optional = true }
rustc_span = { path = "../rustc_span", optional = true } rustc_span = { path = "../rustc_span", optional = true }
@ -19,7 +18,6 @@ tracing = "0.1"
rustc = [ rustc = [
"dep:rustc_abi", "dep:rustc_abi",
"dep:rustc_hir", "dep:rustc_hir",
"dep:rustc_infer",
"dep:rustc_macros", "dep:rustc_macros",
"dep:rustc_middle", "dep:rustc_middle",
"dep:rustc_span", "dep:rustc_span",

View file

@ -81,7 +81,6 @@ pub enum Reason<T> {
#[cfg(feature = "rustc")] #[cfg(feature = "rustc")]
mod rustc { mod rustc {
use rustc_hir::lang_items::LangItem; use rustc_hir::lang_items::LangItem;
use rustc_infer::infer::InferCtxt;
use rustc_macros::TypeVisitable; use rustc_macros::TypeVisitable;
use rustc_middle::traits::ObligationCause; use rustc_middle::traits::ObligationCause;
use rustc_middle::ty::{Const, ParamEnv, Ty, TyCtxt}; use rustc_middle::ty::{Const, ParamEnv, Ty, TyCtxt};
@ -97,13 +96,13 @@ mod rustc {
pub dst: Ty<'tcx>, pub dst: Ty<'tcx>,
} }
pub struct TransmuteTypeEnv<'cx, 'tcx> { pub struct TransmuteTypeEnv<'tcx> {
infcx: &'cx InferCtxt<'tcx>, tcx: TyCtxt<'tcx>,
} }
impl<'cx, 'tcx> TransmuteTypeEnv<'cx, 'tcx> { impl<'tcx> TransmuteTypeEnv<'tcx> {
pub fn new(infcx: &'cx InferCtxt<'tcx>) -> Self { pub fn new(tcx: TyCtxt<'tcx>) -> Self {
Self { infcx } Self { tcx }
} }
#[allow(unused)] #[allow(unused)]
@ -117,7 +116,7 @@ mod rustc {
types.src, types.src,
types.dst, types.dst,
assume, assume,
self.infcx.tcx, self.tcx,
) )
.answer() .answer()
} }