]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gccrs: name-resolution: Handle let-else properly
authorArthur Cohen <arthur.cohen@embecosm.com>
Wed, 5 Mar 2025 15:34:25 +0000 (15:34 +0000)
committerArthur Cohen <arthur.cohen@embecosm.com>
Mon, 31 Mar 2025 19:07:15 +0000 (21:07 +0200)
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 d3ff14f755e7fa32f0b003a9acbc5d3f2c29a276..6c99d6a6f6c0ab0fab02eb20b903e04ee179069c 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 cf7b7dcd03fbbd2bb58cf830733b9577359f5920..95df7272c75751a0eb240c51a7362b132ad9c955 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?