https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102720
--- Comment #11 from Jan Hubicka <hubicka at gcc dot gnu.org> --- Aha, the problem is in the way I updated computing use/clobber sets. I accidentally disabled code that copies the solution from solver local representation into the final form. As a result we failed to update the call uses while doing the late alias pass and ended up with stale decl from first run. Honza diff --git a/gcc/tree-ssa-structalias.c b/gcc/tree-ssa-structalias.c index 6f12a66ee0d..ebb4ea78674 100644 --- a/gcc/tree-ssa-structalias.c +++ b/gcc/tree-ssa-structalias.c @@ -379,7 +379,7 @@ new_var_info (tree t, const char *name, bool add_id) if (dump_file && add_id) { - char *tempname = xasprintf ("%s(%d)", name, index); + char *tempname = xasprintf ("%s(%d,%d)", name, index, t?DECL_UID (t):-1); name = ggc_strdup (tempname); free (tempname); } @@ -7541,17 +7541,18 @@ compute_points_to_sets (void) determine_global_memory_access (stmt, NULL, &reads_global_memory, &uses_global_memory); - if (!uses_global_memory) - ; - else if ((vi = lookup_call_use_vi (stmt)) != NULL) + if ((vi = lookup_call_use_vi (stmt)) != NULL) { *pt = find_what_var_points_to (cfun->decl, vi); /* Escaped (and thus nonlocal) variables are always implicitly used by calls. */ /* ??? ESCAPED can be empty even though NONLOCAL always escaped. */ - pt->nonlocal = uses_global_memory; - pt->escaped = uses_global_memory; + if (uses_global_memory) + { + pt->nonlocal = uses_global_memory; + pt->escaped = uses_global_memory; + } } else if (uses_global_memory) { @@ -7572,17 +7573,18 @@ compute_points_to_sets (void) determine_global_memory_access (stmt, &writes_global_memory, NULL, NULL); - if (!writes_global_memory) - ; - else if ((vi = lookup_call_clobber_vi (stmt)) != NULL) + if ((vi = lookup_call_clobber_vi (stmt)) != NULL) { *pt = find_what_var_points_to (cfun->decl, vi); /* Escaped (and thus nonlocal) variables are always implicitly clobbered by calls. */ /* ??? ESCAPED can be empty even though NONLOCAL always escaped. */ - pt->nonlocal = writes_global_memory; - pt->escaped = writes_global_memory; + if (writes_global_memory) + { + pt->nonlocal = writes_global_memory; + pt->escaped = writes_global_memory; + } } else if (writes_global_memory) {