diff options
author | Aldy Hernandez <aldyh@redhat.com> | 2021-11-04 09:23:24 +0100 |
---|---|---|
committer | Aldy Hernandez <aldyh@redhat.com> | 2021-11-04 11:48:04 +0100 |
commit | bb27f5e9ec3c7ab0f5c859d90c59dd4573b53d97 (patch) | |
tree | 7ac127b51f562744c2266093157f407bffc51415 /gcc/value-pointer-equiv.h | |
parent | a45d577b2b05e231e7a9abd43165f1e3120af013 (diff) | |
download | gcc-bb27f5e9ec3c7ab0f5c859d90c59dd4573b53d97.zip gcc-bb27f5e9ec3c7ab0f5c859d90c59dd4573b53d97.tar.gz gcc-bb27f5e9ec3c7ab0f5c859d90c59dd4573b53d97.tar.bz2 |
Convert arrays in ssa pointer_equiv_analyzer to auto_vec's.
The problem in this PR is an off-by-one bug. We should've allocated
num_ssa_names + 1. However, in fixing this, I noticed that
num_ssa_names can change between queries, so I have replaced the array
with an auto_vec and added code to grow the vector as necessary.
Tested on x86-64 Linux.
PR tree-optimization/103062
gcc/ChangeLog:
PR tree-optimization/103062
* value-pointer-equiv.cc (ssa_equiv_stack::ssa_equiv_stack):
Increase size of allocation by 1.
(ssa_equiv_stack::push_replacement): Grow as needed.
(ssa_equiv_stack::get_replacement): Same.
(pointer_equiv_analyzer::pointer_equiv_analyzer): Same.
(pointer_equiv_analyzer::~pointer_equiv_analyzer): Remove delete.
(pointer_equiv_analyzer::set_global_equiv): Grow as needed.
(pointer_equiv_analyzer::get_equiv): Same.
(pointer_equiv_analyzer::get_equiv_expr): Remove const.
* value-pointer-equiv.h (class pointer_equiv_analyzer): Remove
const markers. Use auto_vec instead of tree *.
gcc/testsuite/ChangeLog:
* gcc.dg/pr103062.c: New test.
Diffstat (limited to 'gcc/value-pointer-equiv.h')
-rw-r--r-- | gcc/value-pointer-equiv.h | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/gcc/value-pointer-equiv.h b/gcc/value-pointer-equiv.h index 0921579..dc747d0 100644 --- a/gcc/value-pointer-equiv.h +++ b/gcc/value-pointer-equiv.h @@ -38,17 +38,17 @@ public: void enter (basic_block); void leave (basic_block); void visit_stmt (gimple *stmt); - tree get_equiv (tree ssa) const; + tree get_equiv (tree ssa); private: void visit_edge (edge e); - tree get_equiv_expr (tree_code code, tree expr) const; + tree get_equiv_expr (tree_code code, tree expr); void set_global_equiv (tree ssa, tree pointee); void set_cond_equiv (tree ssa, tree pointee); gimple_ranger *m_ranger; // Global pointer equivalency indexed by SSA_NAME_VERSION. - tree *m_global_points; + auto_vec<tree> m_global_points; // Conditional pointer equivalency. class ssa_equiv_stack *m_cond_points; }; |