Skip to content

Commit 926331f

Browse files
committed
name-resolution: Handle let-else properly
gcc/rust/ChangeLog: * resolve/rust-ast-resolve-stmt.h: Add handling for diverging else. * resolve/rust-late-name-resolver-2.0.cc (Late::visit): Likewise.
1 parent 3c94cda commit 926331f

File tree

2 files changed

+7
-3
lines changed

2 files changed

+7
-3
lines changed

gcc/rust/resolve/rust-ast-resolve-stmt.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,10 @@ class ResolveStmt : public ResolverBase
7373
void visit (AST::LetStmt &stmt) override
7474
{
7575
if (stmt.has_init_expr ())
76-
{
77-
ResolveExpr::go (stmt.get_init_expr (), prefix, canonical_prefix);
78-
}
76+
ResolveExpr::go (stmt.get_init_expr (), prefix, canonical_prefix);
77+
78+
if (stmt.has_else_expr ())
79+
ResolveExpr::go (stmt.get_else_expr (), prefix, canonical_prefix);
7980

8081
PatternDeclaration::go (stmt.get_pattern (), Rib::ItemType::Var);
8182
if (stmt.has_type ())

gcc/rust/resolve/rust-late-name-resolver-2.0.cc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,9 @@ Late::visit (AST::LetStmt &let)
140140
visit (let.get_init_expr ());
141141
visit (let.get_pattern ());
142142

143+
if (let.has_else_expr ())
144+
visit (let.get_init_expr ());
145+
143146
// how do we deal with the fact that `let a = blipbloup` should look for a
144147
// label and cannot go through function ribs, but `let a = blipbloup()` can?
145148

0 commit comments

Comments
 (0)