> Hi,
>
> interactions of IPA-CP and IPA-SRA on the same data is a rather big
> source of issues, I'm afraid. PR 113964 is a situation where IPA-CP
> propagates an unsigned short in a union parameter into a function
> which itself calls a different function which has a same union
> parameter and both these union parameters are split with IPA-SRA. The
> leaf function however uses a signed short member of the union.
>
> In the calling function, we get the unsigned constant as the
> replacement for the union and it is then passed in the call without
> any type compatibility checks. Apparently on riscv64 it matters
> whether the parameter is signed or unsigned short and so the leaf
> function can see different values.
>
> Fixed by using useless_type_conversion_p at the appropriate place and
> if it fails, use force_value_to type as elsewhere in similar
> situations.
>
> Bootstrapped and tested on x86_64-linux, the reporter has also run the
> testsuite with this patch on riscv64 and reported in Bugzilla there were
> no issues.
>
> OK for master and GCC 13?
>
> Thanks,
>
> Martin
>
>
> gcc/ChangeLog:
>
> 2024-04-04 Martin Jambor <mjam...@suse.cz>
>
> PR ipa/113964
> * ipa-param-manipulation.cc (ipa_param_adjustments::modify_call):
> Force values obtined through pass-through maps to the expected
> split type.
>
> gcc/testsuite/ChangeLog:
>
> 2024-04-04 Patrick O'Neill <patr...@rivosinc.com>
> Martin Jambor <mjam...@suse.cz>
>
> PR ipa/113964
> * gcc.dg/ipa/pr114247.c: New test.
OK,
thanks!
Honza