about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMara Bos <m-ou.se@m-ou.se>2024-02-20 14:41:55 +0100
committerMara Bos <m-ou.se@m-ou.se>2024-02-20 15:34:11 +0100
commit679b90c2954102099d4876d59e94219e544964ce (patch)
treee12948077224259c4366a75646e2fda55f14dc43
parentcce6a6e22e715bd74455f2560a956ab920c3a914 (diff)
downloadrust-679b90c2954102099d4876d59e94219e544964ce.tar.gz
rust-679b90c2954102099d4876d59e94219e544964ce.zip
Propagate temporary lifetime extension into if and match.
-rw-r--r--compiler/rustc_hir_analysis/src/check/region.rs13
1 files changed, 13 insertions, 0 deletions
diff --git a/compiler/rustc_hir_analysis/src/check/region.rs b/compiler/rustc_hir_analysis/src/check/region.rs
index 0f5fd7e99b7..e16d61bed2e 100644
--- a/compiler/rustc_hir_analysis/src/check/region.rs
+++ b/compiler/rustc_hir_analysis/src/check/region.rs
@@ -689,6 +689,8 @@ fn resolve_local<'tcx>(
     ///        | [ ..., E&, ... ]
     ///        | ( ..., E&, ... )
     ///        | {...; E&}
+    ///        | if _ { ...; E& } else { ...; E& }
+    ///        | match _ { ..., _ => E&, ... }
     ///        | box E&
     ///        | E& as ...
     ///        | ( E& )
@@ -727,6 +729,17 @@ fn resolve_local<'tcx>(
                     record_rvalue_scope_if_borrow_expr(visitor, subexpr, blk_id);
                 }
             }
+            hir::ExprKind::If(_, then_block, else_block) => {
+                record_rvalue_scope_if_borrow_expr(visitor, then_block, blk_id);
+                if let Some(else_block) = else_block {
+                    record_rvalue_scope_if_borrow_expr(visitor, else_block, blk_id);
+                }
+            }
+            hir::ExprKind::Match(_, arms, _) => {
+                for arm in arms {
+                    record_rvalue_scope_if_borrow_expr(visitor, arm.body, blk_id);
+                }
+            }
             hir::ExprKind::Call(..) | hir::ExprKind::MethodCall(..) => {
                 // FIXME(@dingxiangfei2009): choose call arguments here
                 // for candidacy for extended parameter rule application