mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 06:44:35 +00:00
Auto merge of #103975 - oli-obk:tracing, r=jackh726
Some tracing and comment cleanups Pulled out of https://github.com/rust-lang/rust/pull/101900 to see if that is the perf impact
This commit is contained in:
commit
a4ab2e0643
@ -146,6 +146,7 @@ impl Qualif for NeedsNonConstDrop {
|
||||
qualifs.needs_non_const_drop
|
||||
}
|
||||
|
||||
#[instrument(level = "trace", skip(cx), ret)]
|
||||
fn in_any_value_of_ty<'tcx>(cx: &ConstCx<'_, 'tcx>, ty: Ty<'tcx>) -> bool {
|
||||
// Avoid selecting for simple cases, such as builtin types.
|
||||
if ty::util::is_trivially_const_drop(ty) {
|
||||
@ -174,6 +175,8 @@ impl Qualif for NeedsNonConstDrop {
|
||||
return true;
|
||||
};
|
||||
|
||||
trace!(?impl_src);
|
||||
|
||||
if !matches!(
|
||||
impl_src,
|
||||
ImplSource::ConstDestruct(_) | ImplSource::Param(_, ty::BoundConstness::ConstIfConst)
|
||||
|
@ -388,6 +388,8 @@ impl<'hir> GenericArgs<'hir> {
|
||||
}
|
||||
|
||||
#[inline]
|
||||
/// This function returns the number of type and const generic params.
|
||||
/// It should only be used for diagnostics.
|
||||
pub fn num_generic_params(&self) -> usize {
|
||||
self.args.iter().filter(|arg| !matches!(arg, GenericArg::Lifetime(_))).count()
|
||||
}
|
||||
|
@ -129,6 +129,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||
output
|
||||
}
|
||||
|
||||
#[instrument(level = "debug", skip(self, call_expr, callee_expr, arg_exprs, autoderef), ret)]
|
||||
fn try_overloaded_call_step(
|
||||
&self,
|
||||
call_expr: &'tcx hir::Expr<'tcx>,
|
||||
@ -138,10 +139,6 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||
) -> Option<CallStep<'tcx>> {
|
||||
let adjusted_ty =
|
||||
self.structurally_resolved_type(autoderef.span(), autoderef.final_ty(false));
|
||||
debug!(
|
||||
"try_overloaded_call_step(call_expr={:?}, adjusted_ty={:?})",
|
||||
call_expr, adjusted_ty
|
||||
);
|
||||
|
||||
// If the callee is a bare function or a closure, then we're all set.
|
||||
match *adjusted_ty.kind() {
|
||||
|
@ -495,7 +495,7 @@ impl<'cx, 'tcx> TypeFolder<'tcx> for Canonicalizer<'cx, 'tcx> {
|
||||
}
|
||||
ty::ConstKind::Bound(debruijn, _) => {
|
||||
if debruijn >= self.binder_index {
|
||||
bug!("escaping bound type during canonicalization")
|
||||
bug!("escaping bound const during canonicalization")
|
||||
} else {
|
||||
return ct;
|
||||
}
|
||||
|
@ -511,12 +511,12 @@ impl<'tcx> Instance<'tcx> {
|
||||
Instance::resolve(tcx, ty::ParamEnv::reveal_all(), def_id, substs).unwrap().unwrap()
|
||||
}
|
||||
|
||||
#[instrument(level = "debug", skip(tcx), ret)]
|
||||
pub fn fn_once_adapter_instance(
|
||||
tcx: TyCtxt<'tcx>,
|
||||
closure_did: DefId,
|
||||
substs: ty::SubstsRef<'tcx>,
|
||||
) -> Option<Instance<'tcx>> {
|
||||
debug!("fn_once_adapter_shim({:?}, {:?})", closure_did, substs);
|
||||
let fn_once = tcx.require_lang_item(LangItem::FnOnce, None);
|
||||
let call_once = tcx
|
||||
.associated_items(fn_once)
|
||||
@ -536,7 +536,7 @@ impl<'tcx> Instance<'tcx> {
|
||||
assert_eq!(sig.inputs().len(), 1);
|
||||
let substs = tcx.mk_substs_trait(self_ty, &[sig.inputs()[0].into()]);
|
||||
|
||||
debug!("fn_once_adapter_shim: self_ty={:?} sig={:?}", self_ty, sig);
|
||||
debug!(?self_ty, ?sig);
|
||||
Some(Instance { def, substs })
|
||||
}
|
||||
|
||||
|
@ -407,9 +407,8 @@ where
|
||||
self.drop_ladder(fields, succ, unwind).0
|
||||
}
|
||||
|
||||
#[instrument(level = "debug", ret)]
|
||||
fn open_drop_for_box(&mut self, adt: ty::AdtDef<'tcx>, substs: SubstsRef<'tcx>) -> BasicBlock {
|
||||
debug!("open_drop_for_box({:?}, {:?}, {:?})", self, adt, substs);
|
||||
|
||||
// drop glue is sent straight to codegen
|
||||
// box cannot be directly dereferenced
|
||||
let unique_ty = adt.non_enum_variant().fields[0].ty(self.tcx(), substs);
|
||||
@ -431,8 +430,8 @@ where
|
||||
self.drop_subpath(interior, interior_path, succ, unwind_succ)
|
||||
}
|
||||
|
||||
#[instrument(level = "debug", ret)]
|
||||
fn open_drop_for_adt(&mut self, adt: ty::AdtDef<'tcx>, substs: SubstsRef<'tcx>) -> BasicBlock {
|
||||
debug!("open_drop_for_adt({:?}, {:?}, {:?})", self, adt, substs);
|
||||
if adt.variants().is_empty() {
|
||||
return self.elaborator.patch().new_block(BasicBlockData {
|
||||
statements: vec![],
|
||||
|
@ -569,17 +569,13 @@ impl<'tcx> CloneShimBuilder<'tcx> {
|
||||
|
||||
/// Builds a "call" shim for `instance`. The shim calls the function specified by `call_kind`,
|
||||
/// first adjusting its first argument according to `rcvr_adjustment`.
|
||||
#[instrument(level = "debug", skip(tcx), ret)]
|
||||
fn build_call_shim<'tcx>(
|
||||
tcx: TyCtxt<'tcx>,
|
||||
instance: ty::InstanceDef<'tcx>,
|
||||
rcvr_adjustment: Option<Adjustment>,
|
||||
call_kind: CallKind<'tcx>,
|
||||
) -> Body<'tcx> {
|
||||
debug!(
|
||||
"build_call_shim(instance={:?}, rcvr_adjustment={:?}, call_kind={:?})",
|
||||
instance, rcvr_adjustment, call_kind
|
||||
);
|
||||
|
||||
// `FnPtrShim` contains the fn pointer type that a call shim is being built for - this is used
|
||||
// to substitute into the signature of the shim. It is not necessary for users of this
|
||||
// MIR body to perform further substitutions (see `InstanceDef::has_polymorphic_mir_body`).
|
||||
@ -641,7 +637,7 @@ fn build_call_shim<'tcx>(
|
||||
|
||||
let span = tcx.def_span(def_id);
|
||||
|
||||
debug!("build_call_shim: sig={:?}", sig);
|
||||
debug!(?sig);
|
||||
|
||||
let mut local_decls = local_decls_for_sig(&sig, span);
|
||||
let source_info = SourceInfo::outermost(span);
|
||||
|
@ -93,6 +93,7 @@ impl<'tcx> InferCtxtExt<'tcx> for InferCtxt<'tcx> {
|
||||
|
||||
/// Normalizes associated types in `value`, potentially returning
|
||||
/// new obligations that must further be processed.
|
||||
#[instrument(level = "debug", skip(self, cause, param_env), ret)]
|
||||
fn partially_normalize_associated_types_in<T>(
|
||||
&self,
|
||||
cause: ObligationCause<'tcx>,
|
||||
@ -102,17 +103,13 @@ impl<'tcx> InferCtxtExt<'tcx> for InferCtxt<'tcx> {
|
||||
where
|
||||
T: TypeFoldable<'tcx>,
|
||||
{
|
||||
debug!("partially_normalize_associated_types_in(value={:?})", value);
|
||||
let mut selcx = traits::SelectionContext::new(self);
|
||||
let traits::Normalized { value, obligations } =
|
||||
traits::normalize(&mut selcx, param_env, cause, value);
|
||||
debug!(
|
||||
"partially_normalize_associated_types_in: result={:?} predicates={:?}",
|
||||
value, obligations
|
||||
);
|
||||
InferOk { value, obligations }
|
||||
}
|
||||
|
||||
#[instrument(level = "debug", skip(self), ret)]
|
||||
fn type_implements_trait(
|
||||
&self,
|
||||
trait_def_id: DefId,
|
||||
@ -120,11 +117,6 @@ impl<'tcx> InferCtxtExt<'tcx> for InferCtxt<'tcx> {
|
||||
params: SubstsRef<'tcx>,
|
||||
param_env: ty::ParamEnv<'tcx>,
|
||||
) -> traits::EvaluationResult {
|
||||
debug!(
|
||||
"type_implements_trait: trait_def_id={:?}, type={:?}, params={:?}, param_env={:?}",
|
||||
trait_def_id, ty, params, param_env
|
||||
);
|
||||
|
||||
let trait_ref =
|
||||
ty::TraitRef { def_id: trait_def_id, substs: self.tcx.mk_substs_trait(ty, params) };
|
||||
|
||||
|
@ -117,14 +117,12 @@ pub enum TraitQueryMode {
|
||||
}
|
||||
|
||||
/// Creates predicate obligations from the generic bounds.
|
||||
#[instrument(level = "debug", skip(cause, param_env))]
|
||||
pub fn predicates_for_generics<'tcx>(
|
||||
cause: impl Fn(usize, Span) -> ObligationCause<'tcx>,
|
||||
param_env: ty::ParamEnv<'tcx>,
|
||||
generic_bounds: ty::InstantiatedPredicates<'tcx>,
|
||||
) -> impl Iterator<Item = PredicateObligation<'tcx>> {
|
||||
let generic_bounds = generic_bounds;
|
||||
debug!("predicates_for_generics(generic_bounds={:?})", generic_bounds);
|
||||
|
||||
std::iter::zip(generic_bounds.predicates, generic_bounds.spans).enumerate().map(
|
||||
move |(idx, (predicate, span))| Obligation {
|
||||
cause: cause(idx, span),
|
||||
@ -140,6 +138,7 @@ pub fn predicates_for_generics<'tcx>(
|
||||
/// `bound` or is not known to meet bound (note that this is
|
||||
/// conservative towards *no impl*, which is the opposite of the
|
||||
/// `evaluate` methods).
|
||||
#[instrument(level = "debug", skip(infcx, param_env, span), ret)]
|
||||
pub fn type_known_to_meet_bound_modulo_regions<'tcx>(
|
||||
infcx: &InferCtxt<'tcx>,
|
||||
param_env: ty::ParamEnv<'tcx>,
|
||||
@ -147,12 +146,6 @@ pub fn type_known_to_meet_bound_modulo_regions<'tcx>(
|
||||
def_id: DefId,
|
||||
span: Span,
|
||||
) -> bool {
|
||||
debug!(
|
||||
"type_known_to_meet_bound_modulo_regions(ty={:?}, bound={:?})",
|
||||
ty,
|
||||
infcx.tcx.def_path_str(def_id)
|
||||
);
|
||||
|
||||
let trait_ref =
|
||||
ty::Binder::dummy(ty::TraitRef { def_id, substs: infcx.tcx.mk_substs_trait(ty, &[]) });
|
||||
let obligation = Obligation {
|
||||
@ -163,12 +156,7 @@ pub fn type_known_to_meet_bound_modulo_regions<'tcx>(
|
||||
};
|
||||
|
||||
let result = infcx.predicate_must_hold_modulo_regions(&obligation);
|
||||
debug!(
|
||||
"type_known_to_meet_ty={:?} bound={} => {:?}",
|
||||
ty,
|
||||
infcx.tcx.def_path_str(def_id),
|
||||
result
|
||||
);
|
||||
debug!(?result);
|
||||
|
||||
if result && ty.has_non_region_infer() {
|
||||
// Because of inference "guessing", selection can sometimes claim
|
||||
@ -190,21 +178,9 @@ pub fn type_known_to_meet_bound_modulo_regions<'tcx>(
|
||||
// *definitively* show that it implements `Copy`. Otherwise,
|
||||
// assume it is move; linear is always ok.
|
||||
match &errors[..] {
|
||||
[] => {
|
||||
debug!(
|
||||
"type_known_to_meet_bound_modulo_regions: ty={:?} bound={} success",
|
||||
ty,
|
||||
infcx.tcx.def_path_str(def_id)
|
||||
);
|
||||
true
|
||||
}
|
||||
[] => true,
|
||||
errors => {
|
||||
debug!(
|
||||
?ty,
|
||||
bound = %infcx.tcx.def_path_str(def_id),
|
||||
?errors,
|
||||
"type_known_to_meet_bound_modulo_regions"
|
||||
);
|
||||
debug!(?errors);
|
||||
false
|
||||
}
|
||||
}
|
||||
|
@ -1132,12 +1132,13 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
|
||||
|
||||
/// filter_impls filters constant trait obligations and candidates that have a positive impl
|
||||
/// for a negative goal and a negative impl for a positive goal
|
||||
#[instrument(level = "debug", skip(self))]
|
||||
#[instrument(level = "debug", skip(self, candidates))]
|
||||
fn filter_impls(
|
||||
&mut self,
|
||||
candidates: Vec<SelectionCandidate<'tcx>>,
|
||||
obligation: &TraitObligation<'tcx>,
|
||||
) -> Vec<SelectionCandidate<'tcx>> {
|
||||
trace!("{candidates:#?}");
|
||||
let tcx = self.tcx();
|
||||
let mut result = Vec::with_capacity(candidates.len());
|
||||
|
||||
@ -1177,6 +1178,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
|
||||
}
|
||||
}
|
||||
|
||||
trace!("{result:#?}");
|
||||
result
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user