Fix null-pointer dereference in delete_dead_or_redundant_call [PR102451]

Message ID SN6PR01MB4958F74459B7FC49F5347255F7A39@SN6PR01MB4958.prod.exchangelabs.com
State Committed
Commit f91b11eb8891f3ae910eb3b2e4a48e2d7d670d2d
Headers
Series Fix null-pointer dereference in delete_dead_or_redundant_call [PR102451] |

Commit Message

Feng Xue OS Sept. 23, 2021, 1:08 a.m. UTC
  Bootstrapped/regtested on x86_64-linux and aarch64-linux.

Thanks,
Feng

---
2021-09-23  Feng Xue  <fxue@os.amperecomputing.com>

gcc/ChangeLog:
	PR tree-optimization/102451
        * tree-ssa-dse.c (delete_dead_or_redundant_call): Record bb of stmt
	before removal.
---
 gcc/tree-ssa-dse.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
  

Comments

Richard Biener Sept. 23, 2021, 8:35 a.m. UTC | #1
On Thu, Sep 23, 2021 at 3:09 AM Feng Xue OS via Gcc-patches
<gcc-patches@gcc.gnu.org> wrote:
>
> Bootstrapped/regtested on x86_64-linux and aarch64-linux.

OK for trunk and all affected branches.

Thanks,
Richard.

> Thanks,
> Feng
>
> ---
> 2021-09-23  Feng Xue  <fxue@os.amperecomputing.com>
>
> gcc/ChangeLog:
>         PR tree-optimization/102451
>         * tree-ssa-dse.c (delete_dead_or_redundant_call): Record bb of stmt
>         before removal.
> ---
>  gcc/tree-ssa-dse.c | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/gcc/tree-ssa-dse.c b/gcc/tree-ssa-dse.c
> index 98daa8ab24c..27287fe88ee 100644
> --- a/gcc/tree-ssa-dse.c
> +++ b/gcc/tree-ssa-dse.c
> @@ -978,6 +978,7 @@ delete_dead_or_redundant_call (gimple_stmt_iterator *gsi, const char *type)
>        fprintf (dump_file, "\n");
>      }
>
> +  basic_block bb = gimple_bb (stmt);
>    tree lhs = gimple_call_lhs (stmt);
>    if (lhs)
>      {
> @@ -985,7 +986,7 @@ delete_dead_or_redundant_call (gimple_stmt_iterator *gsi, const char *type)
>        gimple *new_stmt = gimple_build_assign (lhs, ptr);
>        unlink_stmt_vdef (stmt);
>        if (gsi_replace (gsi, new_stmt, true))
> -        bitmap_set_bit (need_eh_cleanup, gimple_bb (stmt)->index);
> +       bitmap_set_bit (need_eh_cleanup, bb->index);
>      }
>    else
>      {
> @@ -994,7 +995,7 @@ delete_dead_or_redundant_call (gimple_stmt_iterator *gsi, const char *type)
>
>        /* Remove the dead store.  */
>        if (gsi_remove (gsi, true))
> -       bitmap_set_bit (need_eh_cleanup, gimple_bb (stmt)->index);
> +       bitmap_set_bit (need_eh_cleanup, bb->index);
>        release_defs (stmt);
>      }
>  }
> --
> 2.17.1
>
  

Patch

diff --git a/gcc/tree-ssa-dse.c b/gcc/tree-ssa-dse.c
index 98daa8ab24c..27287fe88ee 100644
--- a/gcc/tree-ssa-dse.c
+++ b/gcc/tree-ssa-dse.c
@@ -978,6 +978,7 @@  delete_dead_or_redundant_call (gimple_stmt_iterator *gsi, const char *type)
       fprintf (dump_file, "\n");
     }
 
+  basic_block bb = gimple_bb (stmt);
   tree lhs = gimple_call_lhs (stmt);
   if (lhs)
     {
@@ -985,7 +986,7 @@  delete_dead_or_redundant_call (gimple_stmt_iterator *gsi, const char *type)
       gimple *new_stmt = gimple_build_assign (lhs, ptr);
       unlink_stmt_vdef (stmt);
       if (gsi_replace (gsi, new_stmt, true))
-        bitmap_set_bit (need_eh_cleanup, gimple_bb (stmt)->index);
+	bitmap_set_bit (need_eh_cleanup, bb->index);
     }
   else
     {
@@ -994,7 +995,7 @@  delete_dead_or_redundant_call (gimple_stmt_iterator *gsi, const char *type)
 
       /* Remove the dead store.  */
       if (gsi_remove (gsi, true))
-	bitmap_set_bit (need_eh_cleanup, gimple_bb (stmt)->index);
+	bitmap_set_bit (need_eh_cleanup, bb->index);
       release_defs (stmt);
     }
 }