https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104377

--- Comment #1 from Feng Xue <fxue at os dot amperecomputing.com> ---
(In reply to Feng Xue from comment #0)
> For function create_specialized_node(), the "node" to operated on seems
> always to be an original cgraph node, never a clone node. From call graph
> related to the function, we know that ipcp_decision_stage () only passes raw
> cgraph node downwards to its callees. Then, "node" reaching
> create_specialized_node() would not be a clone, so the code enclosed by "if
> (old_adjustments)" might be of no use. But I am not sure sure if there is
> some thing that I missed.
> 
> ipcp_driver
>  |
>  '--> ipcp_decision_stage
>        |
>        '--> decide_whether_version_node
>              |
>              |--> decide_about_value
>              |     |
>              '-----'--> create_specialized_node


OK. I does missed something. Here we could not hold assumption that
ipcp_decision_stage() only sees raw cgraph node, since sometime in the future
some new ipa pass may be added prior to ipa-cp, and this pass introduces clone
node.

However, there is a questionable point about the code snippet

          if (!node->can_change_signature
              || old_adj->op != IPA_PARAM_OP_COPY
              || (!known_csts[old_adj->base_index]
                  && ipa_is_param_used (info, old_adj->base_index)))

In ipa-cp, known_csts is for the node, has no relation to the node's origin
node, but here it is accessed via index of the latter (old_adj->base_index),
will this cause out-of-bound error?

Reply via email to