https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113907
--- Comment #27 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
So:
--- gcc/ipa-icf.cc.jj 2024-02-10 11:25:09.645478952 +0100
+++ gcc/ipa-icf.cc 2024-02-14 10:44:27.906216458 +0100
@@ -1244,6 +1244,29 @@ sem_function::merge (sem_item *alias_ite
else
create_alias = true;
+ unsigned i;
+ tree name;
+ FOR_EACH_SSA_NAME (i, name, original->get_fun ())
+ {
+ /* We need to either merge or reset SSA_NAME_*_INFO.
+ For merging we don't preserve the mapping between
+ original and alias SSA_NAMEs from successful equals
+ calls. */
+ if (POINTER_TYPE_P (TREE_TYPE (name)))
+ {
+ if (SSA_NAME_PTR_INFO (name))
+ {
+ gcc_assert (!flag_wpa);
+ SSA_NAME_PTR_INFO (name) = NULL;
+ }
+ }
+ else if (SSA_NAME_RANGE_INFO (name))
+ {
+ gcc_assert (!flag_wpa);
+ SSA_NAME_RANGE_INFO (name) = NULL;
+ }
+ }
+
if (redirect_callers)
{
int nredirected = redirect_all_callers (alias, local_original);
then? For the merging, I guess we'd need to move one of the 2 vec<int> vectors
from m_checker to the sem_function instead of throwing it away in
sem_function::equals
if returning true.