diff options
author | Jan Hubicka <jh@suse.cz> | 2021-11-04 17:07:44 +0100 |
---|---|---|
committer | Jan Hubicka <jh@suse.cz> | 2021-11-04 17:10:47 +0100 |
commit | d3f7a2fa64f8777cb7eae1b99ff80fbe717095ac (patch) | |
tree | fd8ef783271f5692ad49229f2b3be417729adcbf | |
parent | fae00a0ac0e5687343a60ae02bf60352002ab9aa (diff) | |
download | gcc-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.c | 13 |
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; } |