https://gcc.gnu.org/g:21e43d47d3f946a0b4f046125b07cdfc7172c41a

commit r15-8381-g21e43d47d3f946a0b4f046125b07cdfc7172c41a
Author: benjamin.thos <benjamin.t...@epita.fr>
Date:   Thu Sep 12 17:10:49 2024 +0000

    gccrs: Fix ICE on error propagation with generic
    
    add a resolve expr visitor on error propagation to avoid internal
    compiler error when used with generics
    
    gcc/rust/ChangeLog:
    
            * resolve/rust-ast-resolve-expr.cc (ResolveExpr::visit): Add
            implementation of error propagation visitor
            * resolve/rust-ast-resolve-expr.h: Add prototype of error
            propagation
    
    Signed-off-by: benjamin.thos <benjamin.t...@epita.fr>

Diff:
---
 gcc/rust/resolve/rust-ast-resolve-expr.cc | 7 +++++++
 gcc/rust/resolve/rust-ast-resolve-expr.h  | 2 ++
 2 files changed, 9 insertions(+)

diff --git a/gcc/rust/resolve/rust-ast-resolve-expr.cc 
b/gcc/rust/resolve/rust-ast-resolve-expr.cc
index 7c2ba9c9d2cf..7ddf4a98f222 100644
--- a/gcc/rust/resolve/rust-ast-resolve-expr.cc
+++ b/gcc/rust/resolve/rust-ast-resolve-expr.cc
@@ -23,6 +23,7 @@
 #include "rust-ast-resolve-pattern.h"
 #include "rust-ast-resolve-path.h"
 #include "diagnostic.h"
+#include "rust-expr.h"
 
 namespace Rust {
 namespace Resolver {
@@ -94,6 +95,12 @@ ResolveExpr::visit (AST::MethodCallExpr &expr)
     ResolveExpr::go (*param, prefix, canonical_prefix);
 }
 
+void
+ResolveExpr::visit (AST::ErrorPropagationExpr &expr)
+{
+  ResolveExpr::go (expr.get_propagating_expr (), prefix, canonical_prefix);
+}
+
 void
 ResolveExpr::visit (AST::AssignmentExpr &expr)
 {
diff --git a/gcc/rust/resolve/rust-ast-resolve-expr.h 
b/gcc/rust/resolve/rust-ast-resolve-expr.h
index 51a69e9886cc..562a3bd02722 100644
--- a/gcc/rust/resolve/rust-ast-resolve-expr.h
+++ b/gcc/rust/resolve/rust-ast-resolve-expr.h
@@ -22,6 +22,7 @@
 #include "rust-ast-resolve-base.h"
 #include "rust-ast.h"
 #include "rust-ast-resolve-pattern.h"
+#include "rust-expr.h"
 
 namespace Rust {
 namespace Resolver {
@@ -80,6 +81,7 @@ public:
   void visit (AST::RangeFromToInclExpr &expr) override;
   void visit (AST::ClosureExprInner &expr) override;
   void visit (AST::ClosureExprInnerTyped &expr) override;
+  void visit (AST::ErrorPropagationExpr &expr) override;
 
 protected:
   void resolve_closure_param (AST::ClosureParam &param,

Reply via email to