aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPranil Dey <mkdeyp@gmail.com>2024-10-01 09:46:48 +0530
committerPranil Dey <mkdeyp@gmail.com>2024-10-01 09:48:04 +0530
commit079ca47d41e5030c63cca7f8ee679e7323a26d45 (patch)
treeb7914004dafafb0f40d5364d23bfa7534b4352ab
parent7ec787200301f75109c41d7c4a82891971dbd62b (diff)
downloadgcc-079ca47d41e5030c63cca7f8ee679e7323a26d45.zip
gcc-079ca47d41e5030c63cca7f8ee679e7323a26d45.tar.gz
gcc-079ca47d41e5030c63cca7f8ee679e7323a26d45.tar.bz2
Updated parameters of functions and typecasted resx stmts
-rw-r--r--gcc/tree-eh.cc23
-rw-r--r--gcc/tree-eh.h2
2 files changed, 14 insertions, 11 deletions
diff --git a/gcc/tree-eh.cc b/gcc/tree-eh.cc
index ea9a2ca..8e76291 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 ea5cefc..4d816fd 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);