> Hi!
> 
> As the following two testcases shows, there are lots of issues in
> ICF compare_gimple_call, in particular, it doesn't handle indirect calls
> properly (see the ipa-icf-31.c testcase), doesn't handle internal calls
> properly (see ubsan/ipa-icf-1.c), didn't check gimple_call flags at all.
> 
> As discussed with Honza, the call chain test (from Martin) is probably
> insufficient, I'm open with leaving it out from the patch, but perhaps
> what the patch has is better than nothing at all for now.
> 
> Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
> 
> 2014-11-10  Jakub Jelinek  <ja...@redhat.com>
>           Martin Liska  <mli...@suse.cz>
> 
>       * ipa-icf-gimple.c (func_checker::compare_bb): Fix comment typo.
>       (func_checker::compare_gimple_call): Compare gimple_call_fn,
>       gimple_call_chain, gimple_call_fntype and call flags.
> testsuite/
>       * gcc.dg/ubsan/ipa-icf-1.c: New test.
>       * gcc.dg/ipa/ipa-icf-31.c: New test.

OK.
> +
> +  tree chain1 = gimple_call_chain (s1);
> +  tree chain2 = gimple_call_chain (s2);
> +
> +  if ((chain1 && !chain2) || (!chain1 && chain2))
> +    return return_false_with_msg ("Tree call chains are different");

Since gimple_call_chain is actually gimple_val, I think it needs to be compared
as operand.

Honza

Reply via email to