https://gcc.gnu.org/g:079ca47d41e5030c63cca7f8ee679e7323a26d45

commit 079ca47d41e5030c63cca7f8ee679e7323a26d45
Author: Pranil Dey <mkd...@gmail.com>
Date:   Tue Oct 1 09:46:48 2024 +0530

    Updated parameters of functions and typecasted resx stmts

Diff:
---
 gcc/tree-eh.cc | 23 +++++++++++++----------
 gcc/tree-eh.h  |  2 +-
 2 files changed, 14 insertions(+), 11 deletions(-)

diff --git a/gcc/tree-eh.cc b/gcc/tree-eh.cc
index ea9a2ca6bb00..8e7629164b7d 100644
--- a/gcc/tree-eh.cc
+++ b/gcc/tree-eh.cc
@@ -2346,18 +2346,20 @@ void update_stmt_eh_region (gimple *stmt) {
     while (region) {
         switch (region->type) {
             case ERT_CLEANUP:
-                if(gimple_code (stmt) == GIMPLE_RESX){
-                  gimple_resx_set_region(stmt, region->index);
+                if (gimple_code (stmt) == GIMPLE_RESX){
+                  gresx *resx_stmt = as_a <gresx *> (stmt);
+                  gimple_resx_set_region (resx_stmt, region->index);
                 }
-                *cfun->eh->throw_stmt_table->get (const_cast<gimple *> (stmt)) 
= lp->index;
+                else *cfun->eh->throw_stmt_table->get (const_cast<gimple *> 
(stmt)) = lp->index;
                 return;
 
             case ERT_TRY:
                 if (match_lp (lp, &exception_types)) {
-                  if(gimple_code (stmt) == GIMPLE_RESX){
-                    gimple_resx_set_region(stmt, region->index);
+                  if (gimple_code (stmt) == GIMPLE_RESX){
+                    gresx *resx_stmt = as_a <gresx *> (stmt);
+                    gimple_resx_set_region (resx_stmt, region->index);
                   }
-                  *cfun->eh->throw_stmt_table->get (const_cast<gimple *> 
(stmt)) = lp->index;
+                  else *cfun->eh->throw_stmt_table->get (const_cast<gimple *> 
(stmt)) = lp->index;
                   return;
                 }
                 break;
@@ -2378,8 +2380,9 @@ void update_stmt_eh_region (gimple *stmt) {
         region = region->outer;
     }
 
-    if(gimple_code (stmt) == GIMPLE_RESX){
-      gimple_resx_set_region(stmt, -1);
+    if (gimple_code (stmt) == GIMPLE_RESX){
+      gresx *resx_stmt = as_a <gresx *> (stmt);
+      gimple_resx_set_region (resx_stmt, 0);
     }
     else remove_stmt_from_eh_lp_fn (cfun, stmt);
 }
@@ -3075,7 +3078,7 @@ void extract_types_for_resx (gimple *resx_stmt, vec<tree> 
*ret_vector) {
   basic_block bb = gimple_bb (resx_stmt);
        
   // Iterate over edges to walk up the basic blocks
-  FOR_EACH_EDGE (e, ei, bb->pred)
+  FOR_EACH_EDGE (e, ei, bb->preds)
   {
        // Get the last stmt of the basic block as it is an EH stmt
        bb = e->src;
@@ -3115,7 +3118,7 @@ void extract_fun_resx_types (function *fun, vec<tree> 
*ret_vector) {
                gimple *stmt = gsi_stmt (gsi);
                vec<tree> *ret_vector;
 
-               if (stmt_can_throw_external (stmt)){
+               if (stmt_can_throw_external (fun, stmt)){
                        if (gimple_code (stmt) == GIMPLE_RESX){
                                extract_types_for_resx (stmt, ret_vector);
                        }
diff --git a/gcc/tree-eh.h b/gcc/tree-eh.h
index ea5cefc9fd29..4d816fd93c85 100644
--- a/gcc/tree-eh.h
+++ b/gcc/tree-eh.h
@@ -44,7 +44,7 @@ extern tree rewrite_to_non_trapping_overflow (tree);
 extern void extract_exception_types_for_call (gcall *, vec<tree> *);
 extern bool stmt_throw_types (function *, gimple *, vec<tree> *);
 extern void extract_types_for_resx (gimple *, vec<tree> *);
-extern void extract_fun_resx_types (function *);
+extern void extract_fun_resx_types (function *, vec<tree> *);
 extern bool stmt_could_throw_p (function *, gimple *);
 extern bool stmt_unremovable_because_of_non_call_eh_p (function *, gimple *);
 extern bool tree_could_throw_p (tree);

Reply via email to