aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2021-11-04 17:07:44 +0100
committerJan Hubicka <jh@suse.cz>2021-11-04 17:10:47 +0100
commitd3f7a2fa64f8777cb7eae1b99ff80fbe717095ac (patch)
treefd8ef783271f5692ad49229f2b3be417729adcbf
parentfae00a0ac0e5687343a60ae02bf60352002ab9aa (diff)
downloadgcc-d3f7a2fa64f8777cb7eae1b99ff80fbe717095ac.zip
gcc-d3f7a2fa64f8777cb7eae1b99ff80fbe717095ac.tar.gz
gcc-d3f7a2fa64f8777cb7eae1b99ff80fbe717095ac.tar.bz2
Workaround ICE in gimple_call_static_chain_flags
gcc/ChangeLog: 2021-11-04 Jan Hubicka <hubicka@ucw.cz> PR ipa/103058 * gimple.c (gimple_call_static_chain_flags): Handle case when nested function does not bind locally.
-rw-r--r--gcc/gimple.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/gcc/gimple.c b/gcc/gimple.c
index 76768c1..7a578f5 100644
--- a/gcc/gimple.c
+++ b/gcc/gimple.c
@@ -1666,7 +1666,18 @@ gimple_call_static_chain_flags (const gcall *stmt)
int modref_flags = summary->static_chain_flags;
/* We have possibly optimized out load. Be conservative here. */
- gcc_checking_assert (node->binds_to_current_def_p ());
+ if (!node->binds_to_current_def_p ())
+ {
+ if ((modref_flags & EAF_UNUSED) && !(flags & EAF_UNUSED))
+ {
+ modref_flags &= ~EAF_UNUSED;
+ modref_flags |= EAF_NOESCAPE;
+ }
+ if ((modref_flags & EAF_NOREAD) && !(flags & EAF_NOREAD))
+ modref_flags &= ~EAF_NOREAD;
+ if ((modref_flags & EAF_DIRECT) && !(flags & EAF_DIRECT))
+ modref_flags &= ~EAF_DIRECT;
+ }
if (dbg_cnt (ipa_mod_ref_pta))
flags |= modref_flags;
}