Hi Richard, Martin, this issue is actually sort of like PR 70856, basically the same ICE after IPA-ICF, due to DECL_PT_UIDs not consistent after reaching for the ultimate_alias_target().
The reason this wasn't covered by the PR70856 fix is that, in this case, the DECL_PT_UID was not set in original->decl, evading the condition, and hence the the merged alias doesn't have DECL_PT_UID set, and causes the ICE in the second round of IPA-PTA (under -fopenacc). My fix is to simply remove the DECL_PT_UID_SET_P (original->decl) guard, and allow the DECL_PT_UID to be set using the DECL_UID in this case. Does this fix make sense? Testing does show no regressions, and the PR testcase ICE is fixed. Thanks, Chung-Lin PR fortran/72743 * ipa-icf.c (sem_variable::merge): Remove guard condition for setting DECL_PT_UID (alias->decl). testsuite/ * gfortran.dg/goacc/pr72743.f90: New test.
Index: ipa-icf.c =================================================================== --- ipa-icf.c (revision 239624) +++ ipa-icf.c (working copy) @@ -2258,8 +2258,7 @@ sem_variable::merge (sem_item *alias_item) varpool_node::create_alias (alias_var->decl, decl); alias->resolve_alias (original); - if (DECL_PT_UID_SET_P (original->decl)) - SET_DECL_PT_UID (alias->decl, DECL_PT_UID (original->decl)); + SET_DECL_PT_UID (alias->decl, DECL_PT_UID (original->decl)); if (dump_file) fprintf (dump_file, "Unified; Variable alias has been created.\n\n"); Index: testsuite/gfortran.dg/goacc/pr72743.f90 =================================================================== --- testsuite/gfortran.dg/goacc/pr72743.f90 (revision 0) +++ testsuite/gfortran.dg/goacc/pr72743.f90 (revision 0) @@ -0,0 +1,15 @@ +! { dg-do compile } +! { dg-additional-options "-O2" } + +program p + integer, parameter :: n = 8 + integer :: i, z(n) + z = [(i, i=1,n)] + print *, z +end +subroutine s + integer, parameter :: n = 8 + integer :: i, z(n) + z = [(i, i=1,n)] + print *, z +end