about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2023-09-02 12:40:44 +0000
committerbors <bors@rust-lang.org>2023-09-02 12:40:44 +0000
commit0e002fe5c6324d61cc8f8100fd7c8bd7e451572a (patch)
treed1f6cafae20694feb1605b8f9ba56888ab217aea
parent8a29d0776fdb7d153e751e5029e44d3a07bf548a (diff)
parent0bf0563a00e85cc4bc0c55539e1b1a38f88afcfe (diff)
downloadrust-0e002fe5c6324d61cc8f8100fd7c8bd7e451572a.tar.gz
rust-0e002fe5c6324d61cc8f8100fd7c8bd7e451572a.zip
Auto merge of #15549 - Veykril:unwind-if-cancelled, r=Veykril
Add a few more `db.unwind_if_cancelled()` calls

Judging from a profile sent by a friend, the borrowck query took up a significant amount of time in their project which might be the cause for some unresponsiveness as nothing in the mir stack currently unwinds on cancellation
-rw-r--r--crates/hir-ty/src/mir/borrowck.rs2
-rw-r--r--crates/hir/src/lib.rs1
2 files changed, 3 insertions, 0 deletions
diff --git a/crates/hir-ty/src/mir/borrowck.rs b/crates/hir-ty/src/mir/borrowck.rs
index c651ddc2cf6..20a439bd643 100644
--- a/crates/hir-ty/src/mir/borrowck.rs
+++ b/crates/hir-ty/src/mir/borrowck.rs
@@ -120,6 +120,7 @@ fn moved_out_of_ref(db: &dyn HirDatabase, body: &MirBody) -> Vec<MovedOutOfRef>
         Operand::Constant(_) | Operand::Static(_) => (),
     };
     for (_, block) in body.basic_blocks.iter() {
+        db.unwind_if_cancelled();
         for statement in &block.statements {
             match &statement.kind {
                 StatementKind::Assign(_, r) => match r {
@@ -318,6 +319,7 @@ fn ever_initialized_map(
         dfs(db, body, body.start_block, l, &mut result);
     }
     for l in body.locals.iter().map(|it| it.0) {
+        db.unwind_if_cancelled();
         if !result[body.start_block].contains_idx(l) {
             result[body.start_block].insert(l, false);
             dfs(db, body, body.start_block, l, &mut result);
diff --git a/crates/hir/src/lib.rs b/crates/hir/src/lib.rs
index 512fe7e0428..f113b772cf0 100644
--- a/crates/hir/src/lib.rs
+++ b/crates/hir/src/lib.rs
@@ -1446,6 +1446,7 @@ impl DefWithBody {
     }
 
     pub fn diagnostics(self, db: &dyn HirDatabase, acc: &mut Vec<AnyDiagnostic>) {
+        db.unwind_if_cancelled();
         let krate = self.module(db).id.krate();
 
         let (body, source_map) = db.body_with_source_map(self.into());