diff options
author | Jakub Jelinek <jakub@redhat.com> | 2012-05-02 11:55:32 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2012-05-02 11:55:32 +0200 |
commit | 795e8869fd8be77f9221f1b3884b228601f7c7d6 (patch) | |
tree | 29483f94c7fd8e951808091e6445ac4ed0428961 /gcc/tree-ssa-phiopt.c | |
parent | 6aae324cce99057e81876888e5f83e20bad9f55d (diff) | |
download | gcc-795e8869fd8be77f9221f1b3884b228601f7c7d6.zip gcc-795e8869fd8be77f9221f1b3884b228601f7c7d6.tar.gz gcc-795e8869fd8be77f9221f1b3884b228601f7c7d6.tar.bz2 |
re PR tree-optimization/53163 (crash due to null ptr deref)
PR tree-optimization/53163
* tree-ssa-phiopt.c (cond_if_else_store_replacement): Don't ignore
return value from compute_all_dependences.
* gcc.c-torture/compile/pr53163.c: New test.
From-SVN: r187038
Diffstat (limited to 'gcc/tree-ssa-phiopt.c')
-rw-r--r-- | gcc/tree-ssa-phiopt.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/gcc/tree-ssa-phiopt.c b/gcc/tree-ssa-phiopt.c index 88c16e6..1cfa0f5 100644 --- a/gcc/tree-ssa-phiopt.c +++ b/gcc/tree-ssa-phiopt.c @@ -1624,8 +1624,17 @@ cond_if_else_store_replacement (basic_block then_bb, basic_block else_bb, /* Compute and check data dependencies in both basic blocks. */ then_ddrs = VEC_alloc (ddr_p, heap, 1); else_ddrs = VEC_alloc (ddr_p, heap, 1); - compute_all_dependences (then_datarefs, &then_ddrs, NULL, false); - compute_all_dependences (else_datarefs, &else_ddrs, NULL, false); + if (!compute_all_dependences (then_datarefs, &then_ddrs, NULL, false) + || !compute_all_dependences (else_datarefs, &else_ddrs, NULL, false)) + { + free_dependence_relations (then_ddrs); + free_dependence_relations (else_ddrs); + free_data_refs (then_datarefs); + free_data_refs (else_datarefs); + VEC_free (gimple, heap, then_stores); + VEC_free (gimple, heap, else_stores); + return false; + } blocks[0] = then_bb; blocks[1] = else_bb; blocks[2] = join_bb; |