[PATCH] ipa/96291: don't crash on unoptimized lto functions
Richard Biener
richard.guenther@gmail.com
Mon Jul 27 07:16:08 GMT 2020
On Sat, Jul 25, 2020 at 8:35 PM Sergei Trofimovich via Gcc-patches
<gcc-patches@gcc.gnu.org> wrote:
>
> From: Sergei Trofimovich <siarheit@google.com>
>
> In PR ipa/96291 the test contained an SCC with one
> unoptimized function. This tricked ipa-cp into NULL dereference.
>
> has_undead_caller_from_outside_scc_p() did not take into account
> that unoptimized funtions don't have IPA summary analysis. and
> dereferenced NULL pointer causing an ICE.
Can you create a single-unit testcase with a SCC with one function
having the no_ipa attribute?
> PR ipa/96291
> * ipa-cp.c (has_undead_caller_from_outside_scc_p): Consider
> unoptimized callers as undead.
> ---
> gcc/ipa-cp.c | 12 +++++++++---
> 1 file changed, 9 insertions(+), 3 deletions(-)
>
> diff --git a/gcc/ipa-cp.c b/gcc/ipa-cp.c
> index b0c8f405260..d5082576962 100644
> --- a/gcc/ipa-cp.c
> +++ b/gcc/ipa-cp.c
> @@ -5666,9 +5666,15 @@ has_undead_caller_from_outside_scc_p (struct cgraph_node *node,
> && cs->caller->call_for_symbol_thunks_and_aliases
> (has_undead_caller_from_outside_scc_p, NULL, true))
> return true;
> - else if (!ipa_edge_within_scc (cs)
> - && !IPA_NODE_REF (cs->caller)->node_dead)
> - return true;
> + else if (!ipa_edge_within_scc (cs))
> + {
> + /* Unoptimized callers don't have IPA information.
> + Conservatively assume callers are undead. */
> + if (!IPA_NODE_REF (cs->caller))
> + return true;
> + if (!IPA_NODE_REF (cs->caller)->node_dead)
> + return true;
> + }
> return false;
> }
>
> --
> 2.27.0
>
More information about the Gcc-patches
mailing list