> Hello.
> 
> Following patch fixes a new issue, ICE has disappeared on aarch64-linux 
> machine and I was able to boostrap on
> the machine. Moreover, no new regression seen on x86_64-linux-pc.
> 
> Ready for trunk?
> Thanks,
> Martin

> >From b8463b8a7b2f6b652d6d9c3a2ece814ec5554619 Mon Sep 17 00:00:00 2001
> From: mliska <mli...@suse.cz>
> Date: Fri, 3 Apr 2015 09:30:50 +0200
> Subject: [PATCH] Fix PR ipa/65665
> 
> gcc/ChangeLog:
> 
> 2015-04-03  Martin Liska  <mli...@suse.cz>
> 
>       PR ipa/65665
>       * ipa-icf.c (sem_function::equals_wpa): Verify that IPA CP
>       has computed data structure.
>       (sem_item_optimizer::update_hash_by_addr_refs): Likewise.

OK,
we should clean this up next stage1 ideally making passmanager to do the 
ipa-prop
analysis and making them trigger for all ipa passes consuming them
(ipa-icf/ipa-cp/inliner). Currently the way they are initialized either by 
inliner
or ipa-cp is quite ugly.

Honza
> ---
>  gcc/ipa-icf.c | 10 ++++++----
>  1 file changed, 6 insertions(+), 4 deletions(-)
> 
> diff --git a/gcc/ipa-icf.c b/gcc/ipa-icf.c
> index 8626730..8f8a0cf 100644
> --- a/gcc/ipa-icf.c
> +++ b/gcc/ipa-icf.c
> @@ -535,7 +535,8 @@ sem_function::equals_wpa (sem_item *item,
>        && (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE
>            || TREE_CODE (TREE_TYPE (item->decl)) == METHOD_TYPE)
>        && (ipa_node_params_sum == NULL
> -       || ipa_is_param_used (IPA_NODE_REF (dyn_cast <cgraph_node *>(node)),
> +       || IPA_NODE_REF (get_node ())->descriptors.is_empty ()
> +       || ipa_is_param_used (IPA_NODE_REF (get_node ()),
>                               0))
>        && compare_polymorphic_p ())
>      {
> @@ -2501,14 +2502,15 @@ sem_item_optimizer::update_hash_by_addr_refs ()
>        m_items[i]->update_hash_by_addr_refs (m_symtab_node_map);
>        if (m_items[i]->type == FUNC)
>       {
> +       cgraph_node *cnode = dyn_cast <cgraph_node *> (m_items[i]->node);
> +
>         if (TREE_CODE (TREE_TYPE (m_items[i]->decl)) == METHOD_TYPE
>             && contains_polymorphic_type_p
>                  (method_class_type (TREE_TYPE (m_items[i]->decl)))
>             && (DECL_CXX_CONSTRUCTOR_P (m_items[i]->decl)
>                 || ((ipa_node_params_sum == NULL
> -                    || ipa_is_param_used (
> -                         IPA_NODE_REF
> -                           (dyn_cast <cgraph_node *>(m_items[i]->node)), 0))
> +                    || IPA_NODE_REF (cnode)->descriptors.is_empty ()
> +                    || ipa_is_param_used (IPA_NODE_REF (cnode), 0))
>                     && static_cast<sem_function *> (m_items[i])
>                          ->compare_polymorphic_p ())))
>            {
> -- 
> 2.1.4
> 

Reply via email to