[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