]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
name-resolution: Handle let-else properly
authorArthur Cohen <arthur.cohen@embecosm.com>
Wed, 5 Mar 2025 15:34:25 +0000 (15:34 +0000)
committerCohenArthur <arthur.cohen@embecosm.com>
Tue, 25 Mar 2025 14:26:53 +0000 (14:26 +0000)
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.

gcc/rust/resolve/rust-ast-resolve-stmt.h
gcc/rust/resolve/rust-late-name-resolver-2.0.cc

index 5d5891043627fc763697e6c4ca9d3939b3ef13b2..a1261a070c1c85479792557eeac6c1156d5db31f 100644 (file)
@@ -73,9 +73,10 @@ public:
   void visit (AST::LetStmt &stmt) override
   {
     if (stmt.has_init_expr ())
-      {
-       ResolveExpr::go (stmt.get_init_expr (), prefix, canonical_prefix);
-      }
+      ResolveExpr::go (stmt.get_init_expr (), prefix, canonical_prefix);
+
+    if (stmt.has_else_expr ())
+      ResolveExpr::go (stmt.get_else_expr (), prefix, canonical_prefix);
 
     PatternDeclaration::go (stmt.get_pattern (), Rib::ItemType::Var);
     if (stmt.has_type ())
index d1c10e51a082d610c9cab7cf6432b85a7b661a0c..5fcf0ec27cde1ddeeb8d6380d403262c9c86b0d9 100644 (file)
@@ -140,6 +140,9 @@ Late::visit (AST::LetStmt &let)
     visit (let.get_init_expr ());
   visit (let.get_pattern ());
 
+  if (let.has_else_expr ())
+    visit (let.get_init_expr ());
+
   // how do we deal with the fact that `let a = blipbloup` should look for a
   // label and cannot go through function ribs, but `let a = blipbloup()` can?