Here the code was originally:
tree *d = m_dead_ssa_debug_equiv.get (value);
m_dead_ssa_debug_equiv.put (dead_ssa, *d);

but hash_map::put's 2nd argument is a reference.
So if the hashmap decides it needs to resize, the argument
is freed. So the fix is simple change the type of d to tree
and dereference the get. Since tree is a pointer there is not
enough data to care about the extra copy.

r12-5630-gb3f60112edcb85 was a similar fix in the same function in fact.

Pushed as obvious after a bootstrapped and tested on x86_64-linux-gnu.

        PR ipa/125699
gcc/ChangeLog:

        * ipa-param-manipulation.cc 
(ipa_param_body_adjustments::prepare_debug_expressions): Fix
        lifetime issue with m_dead_ssa_debug_equiv usage.

Signed-off-by: Andrew Pinski <[email protected]>
---
 gcc/ipa-param-manipulation.cc | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/gcc/ipa-param-manipulation.cc b/gcc/ipa-param-manipulation.cc
index e35f6223541..6f85d10a29e 100644
--- a/gcc/ipa-param-manipulation.cc
+++ b/gcc/ipa-param-manipulation.cc
@@ -1386,8 +1386,8 @@ ipa_param_body_adjustments::prepare_debug_expressions 
(tree dead_ssa)
        }
 
       gcc_assert (TREE_CODE (value) == SSA_NAME);
-      tree *d = m_dead_ssa_debug_equiv.get (value);
-      m_dead_ssa_debug_equiv.put (dead_ssa, *d);
+      tree d = *m_dead_ssa_debug_equiv.get (value);
+      m_dead_ssa_debug_equiv.put (dead_ssa, d);
       return true;
     }
 
-- 
2.43.0

Reply via email to