From: Owen Avery <powerboat9.ga...@gmail.com>

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>
---
 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 588caa4e6f0..f1c0e5caffe 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 3fa03791107..cf0df68595f 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 &) {}
-- 
2.49.0

Reply via email to