Skip to content

Commit

Permalink
useful debug printouts
Browse files Browse the repository at this point in the history
The changes to dumping expressions seem particularly useful
  • Loading branch information
nikomatsakis committed Aug 23, 2021
1 parent af15e52 commit 754d51e
Show file tree
Hide file tree
Showing 6 changed files with 31 additions and 13 deletions.
2 changes: 2 additions & 0 deletions compiler/rustc_typeck/src/check/_match.rs
Expand Up @@ -14,6 +14,7 @@ use rustc_trait_selection::traits::{
};

impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
#[instrument(skip(self), level="debug")]
pub fn check_match(
&self,
expr: &'tcx hir::Expr<'tcx>,
Expand All @@ -26,6 +27,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {

let acrb = arms_contain_ref_bindings(arms);
let scrutinee_ty = self.demand_scrutinee_type(scrut, acrb, arms.is_empty());
debug!(?scrutinee_ty);

// If there are no arms, that is a diverging match; a special case.
if arms.is_empty() {
Expand Down
4 changes: 2 additions & 2 deletions compiler/rustc_typeck/src/check/cast.rs
Expand Up @@ -51,6 +51,7 @@ use rustc_trait_selection::traits::error_reporting::report_object_safety_error;

/// Reifies a cast check to be checked once we have full type information for
/// a function context.
#[derive(Debug)]
pub struct CastCheck<'tcx> {
expr: &'tcx hir::Expr<'tcx>,
expr_ty: Ty<'tcx>,
Expand Down Expand Up @@ -603,12 +604,11 @@ impl<'a, 'tcx> CastCheck<'tcx> {
});
}

#[instrument(skip(fcx), level = "debug")]
pub fn check(mut self, fcx: &FnCtxt<'a, 'tcx>) {
self.expr_ty = fcx.structurally_resolved_type(self.expr.span, self.expr_ty);
self.cast_ty = fcx.structurally_resolved_type(self.cast_span, self.cast_ty);

debug!("check_cast({}, {:?} as {:?})", self.expr.hir_id, self.expr_ty, self.cast_ty);

if !fcx.type_is_known_to_be_sized_modulo_regions(self.cast_ty, self.span) {
self.report_cast_to_unsized_type(fcx);
} else if self.expr_ty.references_error() || self.cast_ty.references_error() {
Expand Down
1 change: 1 addition & 0 deletions compiler/rustc_typeck/src/check/coercion.rs
Expand Up @@ -1328,6 +1328,7 @@ impl<'tcx, 'exprs, E: AsCoercionSite> CoerceMany<'tcx, 'exprs, E> {
/// The inner coercion "engine". If `expression` is `None`, this
/// is a forced-unit case, and hence `expression_ty` must be
/// `Nil`.
#[instrument(skip(self,fcx,augment_error,label_expression_as_expected), level="debug")]
crate fn coerce_inner<'a>(
&mut self,
fcx: &FnCtxt<'a, 'tcx>,
Expand Down
23 changes: 22 additions & 1 deletion compiler/rustc_typeck/src/check/expr.rs
Expand Up @@ -156,12 +156,27 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
/// Note that inspecting a type's structure *directly* may expose the fact
/// that there are actually multiple representations for `Error`, so avoid
/// that when err needs to be handled differently.
#[instrument(skip(self), level="debug")]
pub(super) fn check_expr_with_expectation(
&self,
expr: &'tcx hir::Expr<'tcx>,
expected: Expectation<'tcx>,
) -> Ty<'tcx> {
debug!(">> type-checking: expected={:?}, expr={:?} ", expected, expr);
if self.tcx().sess.verbose() {
// make this code only run with -Zverbose because it is probably slow
if let Ok(lint_str) = self.tcx.sess.source_map().span_to_snippet(expr.span) {
if !lint_str.contains("\n") {
debug!("expr text: {}", lint_str);
} else {
let mut lines = lint_str.lines();
if let Some(line0) = lines.next() {
let remaining_lines = lines.count();
debug!("expr text: {}", line0);
debug!("expr text: ...(and {} more lines)", remaining_lines);
}
}
}
}

// True if `expr` is a `Try::from_ok(())` that is a result of desugaring a try block
// without the final expr (e.g. `try { return; }`). We don't want to generate an
Expand Down Expand Up @@ -1049,6 +1064,12 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
let mut deferred_cast_checks = self.deferred_cast_checks.borrow_mut();
match cast::CastCheck::new(self, e, t_expr, t_cast, t.span, expr.span) {
Ok(cast_check) => {
debug!(
"check_expr_cast: deferring cast from {:?} to {:?}: {:?}",
t_cast,
t_expr,
cast_check,
);
deferred_cast_checks.push(cast_check);
t_cast
}
Expand Down
1 change: 1 addition & 0 deletions compiler/rustc_typeck/src/check/fn_ctxt/checks.rs
Expand Up @@ -29,6 +29,7 @@ use std::slice;
impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
pub(in super::super) fn check_casts(&self) {
let mut deferred_cast_checks = self.deferred_cast_checks.borrow_mut();
debug!("FnCtxt::check_casts: {} deferred checks", deferred_cast_checks.len());
for cast in deferred_cast_checks.drain(..) {
cast.check(self);
}
Expand Down
13 changes: 3 additions & 10 deletions compiler/rustc_typeck/src/expr_use_visitor.rs
Expand Up @@ -120,9 +120,8 @@ impl<'a, 'tcx> ExprUseVisitor<'a, 'tcx> {
}
}

#[instrument(skip(self), level = "debug")]
pub fn consume_body(&mut self, body: &hir::Body<'_>) {
debug!("consume_body(body={:?})", body);

for param in body.params {
let param_ty = return_if_err!(self.mc.pat_ty_adjusted(&param.pat));
debug!("consume_body: param_ty = {:?}", param_ty);
Expand Down Expand Up @@ -243,7 +242,7 @@ impl<'a, 'tcx> ExprUseVisitor<'a, 'tcx> {
let ExprUseVisitor { ref mc, body_owner: _, delegate: _ } = *self;
let mut needs_to_be_read = false;
for arm in arms.iter() {
match mc.cat_pattern(discr_place.clone(), &arm.pat, |place, pat| {
return_if_err!(mc.cat_pattern(discr_place.clone(), &arm.pat, |place, pat| {
match &pat.kind {
PatKind::Binding(.., opt_sub_pat) => {
// If the opt_sub_pat is None, than the binding does not count as
Expand Down Expand Up @@ -290,13 +289,7 @@ impl<'a, 'tcx> ExprUseVisitor<'a, 'tcx> {
// examined
}
}
}) {
Ok(_) => (),
Err(_) => {
// If typeck failed, assume borrow is needed.
needs_to_be_read = true;
}
}
}));
}

if needs_to_be_read {
Expand Down

0 comments on commit 754d51e

Please sign in to comment.