https://gcc.gnu.org/g:3c18f1e487764251aad411e927bd0857c42ae3cd

commit r16-2956-g3c18f1e487764251aad411e927bd0857c42ae3cd
Author: Owen Avery <powerboat9.ga...@gmail.com>
Date:   Mon Jul 21 22:32:29 2025 -0400

    gccrs: Handle IfLetExprConseqElse in DefaultResolver
    
    This relies on the DefaultASTVisitor visitor for IfLetExprConseqElse
    performing a virtual call of the visitor for IfLetExpr, which doesn't
    hold when DefaultASTVisitor is generated by the X-macro-DSL-system I
    have in another patch.
    
    gcc/rust/ChangeLog:
    
            * resolve/rust-default-resolver.cc (DefaultResolver::visit): Add
            visitor for IfLetExprConseqElse.
            * resolve/rust-default-resolver.h (DefaultResolver::visit):
            Likewise.
    
    Signed-off-by: Owen Avery <powerboat9.ga...@gmail.com>

Diff:
---
 gcc/rust/resolve/rust-default-resolver.cc | 7 +++++++
 gcc/rust/resolve/rust-default-resolver.h  | 1 +
 2 files changed, 8 insertions(+)

diff --git a/gcc/rust/resolve/rust-default-resolver.cc 
b/gcc/rust/resolve/rust-default-resolver.cc
index 588caa4e6f0c..f1c0e5caffe8 100644
--- a/gcc/rust/resolve/rust-default-resolver.cc
+++ b/gcc/rust/resolve/rust-default-resolver.cc
@@ -110,6 +110,13 @@ DefaultResolver::visit (AST::IfLetExpr &expr)
   ctx.scoped (Rib::Kind::Normal, expr.get_node_id (), inner_vis);
 }
 
+void
+DefaultResolver::visit (AST::IfLetExprConseqElse &expr)
+{
+  DefaultResolver::visit (static_cast<AST::IfLetExpr &> (expr));
+  visit (expr.get_else_block ());
+}
+
 void
 DefaultResolver::visit (AST::Trait &trait)
 {
diff --git a/gcc/rust/resolve/rust-default-resolver.h 
b/gcc/rust/resolve/rust-default-resolver.h
index 3fa037911075..cf0df68595f0 100644
--- a/gcc/rust/resolve/rust-default-resolver.h
+++ b/gcc/rust/resolve/rust-default-resolver.h
@@ -49,6 +49,7 @@ public:
   void visit (AST::ForLoopExpr &expr) override;
   virtual void visit_if_let_patterns (AST::IfLetExpr &expr);
   void visit (AST::IfLetExpr &expr) override;
+  void visit (AST::IfLetExprConseqElse &expr) override;
   void visit (AST::Trait &) override;
   // used to handle Self insertion in TopLevel
   virtual void maybe_insert_big_self (AST::Impl &) {}

Reply via email to