Skip to content

Commit

Permalink
Make sure to walk into nested const blocks in RegionResolutionVisitor
Browse files Browse the repository at this point in the history
  • Loading branch information
compiler-errors committed Jan 9, 2025
1 parent 8247594 commit 9d2e1ed
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 4 deletions.
12 changes: 8 additions & 4 deletions compiler/rustc_hir_analysis/src/check/region.rs
Original file line number Diff line number Diff line change
Expand Up @@ -420,10 +420,10 @@ fn resolve_expr<'tcx>(visitor: &mut RegionResolutionVisitor<'tcx>, expr: &'tcx h
// properly, we can't miss any types.

match expr.kind {
// Manually recurse over closures and inline consts, because they are the only
// case of nested bodies that share the parent environment.
hir::ExprKind::Closure(&hir::Closure { body, .. })
| hir::ExprKind::ConstBlock(hir::ConstBlock { body, .. }) => {
// Manually recurse over closures, because they are nested bodies
// that share the parent environment. We handle const blocks in
// `visit_inline_const`.
hir::ExprKind::Closure(&hir::Closure { body, .. }) => {
let body = visitor.tcx.hir().body(body);
visitor.visit_body(body);
}
Expand Down Expand Up @@ -906,6 +906,10 @@ impl<'tcx> Visitor<'tcx> for RegionResolutionVisitor<'tcx> {
fn visit_local(&mut self, l: &'tcx LetStmt<'tcx>) {
resolve_local(self, Some(l.pat), l.init)
}
fn visit_inline_const(&mut self, c: &'tcx hir::ConstBlock) {
let body = self.tcx.hir().body(c.body);
self.visit_body(body);
}
}

/// Per-body `region::ScopeTree`. The `DefId` should be the owner `DefId` for the body;
Expand Down
16 changes: 16 additions & 0 deletions tests/ui/inline-const/collect-scopes-in-pat.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
// @compile-flags: -Zlint-mir
//@ check-pass

#![feature(inline_const_pat)]

fn main() {
match 1 {
const {
|| match 0 {
x => 0,
};
0
} => (),
_ => (),
}
}

0 comments on commit 9d2e1ed

Please sign in to comment.