https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70856
--- Comment #5 from vries at gcc dot gnu.org --- before icf, we have: ... static real(kind=4) A.4[2] = {1.0e+0, 2.0e+0}; static real(kind=4) A.1[2] = {1.0e+0, 2.0e+0}; ... Then icf does: ... Semantic equality hit:A.4->A.1 Assembler symbol names:A.4.3435->A.1.3429 Unified; Variable alias has been created. ... And after icf, we have: ... static real(kind=4) A.4[2] = {1.0e+0, 2.0e+0}; static real(kind=4) A.1[2]; ... What openacc does, is run ipa-pta before and after icf. The compilation succeeds with -fno-ipa-icf.