Skip to content

Commit

Permalink
Auto merge of #93284 - eholk:disable-drop-range-analysis, r=pnkfelix
Browse files Browse the repository at this point in the history
Disable drop range analysis

The previous PR, #93165, still performed the drop range analysis despite ignoring the results. Unfortunately, there were ICEs in the analysis as well, so some packages failed to build (see the issue #93197 for an example). This change further disables the analysis and just provides dummy results in that case.
  • Loading branch information
bors committed Feb 1, 2022
2 parents 547f2ba + 9f9d82a commit 686663a
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 12 deletions.
30 changes: 18 additions & 12 deletions compiler/rustc_typeck/src/check/generator_interior/drop_ranges.rs
Original file line number Diff line number Diff line change
Expand Up @@ -37,21 +37,27 @@ pub fn compute_drop_ranges<'a, 'tcx>(
def_id: DefId,
body: &'tcx Body<'tcx>,
) -> DropRanges {
let consumed_borrowed_places = find_consumed_and_borrowed(fcx, def_id, body);
if super::ENABLE_DROP_TRACKING {
let consumed_borrowed_places = find_consumed_and_borrowed(fcx, def_id, body);

let num_exprs = fcx.tcx.region_scope_tree(def_id).body_expr_count(body.id()).unwrap_or(0);
let mut drop_ranges = build_control_flow_graph(
fcx.tcx.hir(),
fcx.tcx,
&fcx.typeck_results.borrow(),
consumed_borrowed_places,
body,
num_exprs,
);
let num_exprs = fcx.tcx.region_scope_tree(def_id).body_expr_count(body.id()).unwrap_or(0);
let mut drop_ranges = build_control_flow_graph(
fcx.tcx.hir(),
fcx.tcx,
&fcx.typeck_results.borrow(),
consumed_borrowed_places,
body,
num_exprs,
);

drop_ranges.propagate_to_fixpoint();
drop_ranges.propagate_to_fixpoint();

DropRanges { tracked_value_map: drop_ranges.tracked_value_map, nodes: drop_ranges.nodes }
DropRanges { tracked_value_map: drop_ranges.tracked_value_map, nodes: drop_ranges.nodes }
} else {
// If drop range tracking is not enabled, skip all the analysis and produce an
// empty set of DropRanges.
DropRanges { tracked_value_map: FxHashMap::default(), nodes: IndexVec::new() }
}
}

/// Applies `f` to consumable node in the HIR subtree pointed to by `place`.
Expand Down
15 changes: 15 additions & 0 deletions src/test/ui/async-await/issue-93197.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
// Regression test for #93197
// check-pass
// edition:2021

#![feature(try_blocks)]

use std::sync::{mpsc, mpsc::SendError};

pub async fn foo() {
let (tx, _) = mpsc::channel();

let _: Result<(), SendError<&str>> = try { tx.send("hello")?; };
}

fn main() {}

0 comments on commit 686663a

Please sign in to comment.