about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2022-02-01 13:45:38 +0000
committerbors <bors@rust-lang.org>2022-02-01 13:45:38 +0000
commit686663a49e57870c78a4cd047f23a44175fc67a4 (patch)
tree7d8e48712d2cea7f7461bec6160fb6266f33dca7
parent547f2ba06bc4aa93a375c54e1af3fd1216eeaf62 (diff)
parent9f9d82ab577d80a00b1c4e1a0a0f1b42a47118d7 (diff)
downloadrust-686663a49e57870c78a4cd047f23a44175fc67a4.tar.gz
rust-686663a49e57870c78a4cd047f23a44175fc67a4.zip
Auto merge of #93284 - eholk:disable-drop-range-analysis, r=pnkfelix
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.
-rw-r--r--compiler/rustc_typeck/src/check/generator_interior/drop_ranges.rs30
-rw-r--r--src/test/ui/async-await/issue-93197.rs15
2 files changed, 33 insertions, 12 deletions
diff --git a/compiler/rustc_typeck/src/check/generator_interior/drop_ranges.rs b/compiler/rustc_typeck/src/check/generator_interior/drop_ranges.rs
index 21a8d7b5634..4b8f01e3535 100644
--- a/compiler/rustc_typeck/src/check/generator_interior/drop_ranges.rs
+++ b/compiler/rustc_typeck/src/check/generator_interior/drop_ranges.rs
@@ -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`.
diff --git a/src/test/ui/async-await/issue-93197.rs b/src/test/ui/async-await/issue-93197.rs
new file mode 100644
index 00000000000..05ec013d0af
--- /dev/null
+++ b/src/test/ui/async-await/issue-93197.rs
@@ -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() {}