1
Fork 0

Return ConstAllocation from eval_static_initializer query directly

This commit is contained in:
Oli Scherer 2023-10-10 08:52:21 +00:00
parent be6ccf13e3
commit e2386270df
18 changed files with 53 additions and 82 deletions

View file

@ -1,4 +1,4 @@
use super::{AllocId, AllocRange, Pointer, Scalar};
use super::{AllocId, AllocRange, ConstAllocation, Pointer, Scalar};
use crate::error;
use crate::mir::{ConstAlloc, ConstValue};
@ -83,7 +83,7 @@ impl Into<ErrorGuaranteed> for ReportedErrorInfo {
TrivialTypeTraversalImpls! { ErrorHandled }
pub type EvalToAllocationRawResult<'tcx> = Result<ConstAlloc<'tcx>, ErrorHandled>;
pub type EvalStaticInitializerRawResult = Result<AllocId, ErrorHandled>;
pub type EvalStaticInitializerRawResult<'tcx> = Result<ConstAllocation<'tcx>, ErrorHandled>;
pub type EvalToConstValueResult<'tcx> = Result<ConstValue<'tcx>, ErrorHandled>;
/// `Ok(None)` indicates the constant was fine, but the valtree couldn't be constructed.
/// This is needed in `thir::pattern::lower_inline_const`.

View file

@ -1,7 +1,7 @@
use super::{ErrorHandled, EvalToConstValueResult, EvalToValTreeResult, GlobalId};
use crate::mir;
use crate::query::{TyCtxtAt, TyCtxtEnsure};
use crate::query::TyCtxtEnsure;
use crate::ty::visit::TypeVisitableExt;
use crate::ty::GenericArgs;
use crate::ty::{self, TyCtxt};
@ -173,30 +173,6 @@ impl<'tcx> TyCtxt<'tcx> {
self.eval_to_valtree(inputs)
}
}
/// Evaluate a static's initializer, returning the allocation of the initializer's memory.
#[inline(always)]
pub fn eval_static_initializer(
self,
def_id: DefId,
) -> Result<mir::ConstAllocation<'tcx>, ErrorHandled> {
self.at(DUMMY_SP).eval_static_initializer(def_id)
}
}
impl<'tcx> TyCtxtAt<'tcx> {
/// Evaluate a static's initializer, returning the allocation of the initializer's memory.
///
/// The span is entirely ignored here, but still helpful for better query cycle errors.
pub fn eval_static_initializer(
self,
def_id: DefId,
) -> Result<mir::ConstAllocation<'tcx>, ErrorHandled> {
trace!("eval_static_initializer: Need to compute {:?}", def_id);
assert!(self.is_static(def_id));
let alloc_id = self.eval_static_initializer_raw(def_id)?;
Ok(self.global_alloc(alloc_id).unwrap_memory())
}
}
impl<'tcx> TyCtxtEnsure<'tcx> {
@ -218,11 +194,4 @@ impl<'tcx> TyCtxtEnsure<'tcx> {
let inputs = self.tcx.erase_regions(param_env.and(cid));
self.eval_to_const_value_raw(inputs)
}
/// Evaluate a static's initializer, returning the allocation of the initializer's memory.
pub fn eval_static_initializer(self, def_id: DefId) {
trace!("eval_static_initializer: Need to compute {:?}", def_id);
assert!(self.tcx.is_static(def_id));
self.eval_static_initializer_raw(def_id);
}
}

View file

@ -2,7 +2,7 @@
//!
//! [rustc dev guide]: https://rustc-dev-guide.rust-lang.org/mir/index.html
use crate::mir::interpret::{AllocRange, ConstAllocation, Scalar};
use crate::mir::interpret::{AllocRange, Scalar};
use crate::mir::visit::MirVisitable;
use crate::ty::codec::{TyDecoder, TyEncoder};
use crate::ty::fold::{FallibleTypeFolder, TypeFoldable};

View file

@ -4,6 +4,8 @@ use std::fs;
use std::io::{self, Write as _};
use std::path::{Path, PathBuf};
use crate::mir::interpret::ConstAllocation;
use super::graphviz::write_mir_fn_graphviz;
use rustc_ast::InlineAsmTemplatePiece;
use rustc_middle::mir::interpret::{

View file

@ -277,7 +277,6 @@ trivial! {
rustc_middle::mir::interpret::CtfeProvenance,
rustc_middle::mir::interpret::ErrorHandled,
rustc_middle::mir::interpret::LitToConstError,
rustc_middle::mir::interpret::EvalStaticInitializerRawResult,
rustc_middle::thir::ExprId,
rustc_middle::traits::CodegenObligationError,
rustc_middle::traits::EvaluationResult,
@ -338,6 +337,7 @@ tcx_lifetime! {
rustc_middle::mir::ConstValue,
rustc_middle::mir::interpret::GlobalId,
rustc_middle::mir::interpret::LitToConstInput,
rustc_middle::mir::interpret::EvalStaticInitializerRawResult,
rustc_middle::traits::query::MethodAutoderefStepsResult,
rustc_middle::traits::query::type_op::AscribeUserType,
rustc_middle::traits::query::type_op::Eq,

View file

@ -1073,7 +1073,7 @@ rustc_queries! {
}
/// Evaluate a static's initializer, returning the allocation of the initializer's memory.
query eval_static_initializer_raw(key: DefId) -> EvalStaticInitializerRawResult {
query eval_static_initializer(key: DefId) -> EvalStaticInitializerRawResult<'tcx> {
desc { |tcx|
"evaluating initializer of static `{}`",
tcx.def_path_str(key)

View file

@ -63,7 +63,6 @@ trivially_parameterized_over_tcx! {
crate::middle::lib_features::FeatureStability,
crate::middle::resolve_bound_vars::ObjectLifetimeDefault,
crate::mir::ConstQualifs,
crate::mir::interpret::AllocId,
ty::AssocItemContainer,
ty::Asyncness,
ty::DeducedParamAttrs,
@ -127,6 +126,7 @@ parameterized_over_tcx! {
crate::middle::exported_symbols::ExportedSymbol,
crate::mir::Body,
crate::mir::CoroutineLayout,
crate::mir::interpret::ConstAllocation,
ty::Ty,
ty::FnSig,
ty::GenericPredicates,