From 3c18f1e487764251aad411e927bd0857c42ae3cd Mon Sep 17 00:00:00 2001 From: Owen Avery Date: Mon, 21 Jul 2025 22:32:29 -0400 Subject: [PATCH] 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 --- 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 (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.47.3