diff options
author | Pranil Dey <mkdeyp@gmail.com> | 2024-10-01 09:46:48 +0530 |
---|---|---|
committer | Pranil Dey <mkdeyp@gmail.com> | 2024-10-01 09:48:04 +0530 |
commit | 079ca47d41e5030c63cca7f8ee679e7323a26d45 (patch) | |
tree | b7914004dafafb0f40d5364d23bfa7534b4352ab | |
parent | 7ec787200301f75109c41d7c4a82891971dbd62b (diff) | |
download | gcc-079ca47d41e5030c63cca7f8ee679e7323a26d45.zip gcc-079ca47d41e5030c63cca7f8ee679e7323a26d45.tar.gz gcc-079ca47d41e5030c63cca7f8ee679e7323a26d45.tar.bz2 |
Updated parameters of functions and typecasted resx stmts
-rw-r--r-- | gcc/tree-eh.cc | 23 | ||||
-rw-r--r-- | 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 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); |