Hi! The PR contains a testcase where the Fortran FE creates FUNCTION_TYPE which doesn't really match the passed in arguments (FUNCTION_TYPE has 5 arguments, call has 6). Now, I think that is a Fortran FE bug that should be fixed there, but I think with function pointers one can create something similar (of course invalid) in C/C++ too,so IMHO IPA should be also more careful. The ipa_get_callee_param_type function can return NULL if something goes wrong and it does e.g. if asked for 7th argument type on a function with just 5 arguments and similar. But, if a function isn't varargs, when asked for 6th argument type on a function with just 5 arguments it actually returns void_type_node because the argument list is in that case terminated with void_list_node.
The following patch makes sure we don't treat void_list_node as something holding another argument. Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk? 2023-05-10 Jakub Jelinek <ja...@redhat.com> PR fortran/109788 * ipa-prop.cc (ipa_get_callee_param_type): Don't return TREE_VALUE (t) if t is void_list_node. --- gcc/ipa-prop.cc.jj 2023-05-01 09:59:46.485296735 +0200 +++ gcc/ipa-prop.cc 2023-05-09 15:07:44.975578250 +0200 @@ -2147,7 +2147,7 @@ ipa_get_callee_param_type (struct cgraph break; t = TREE_CHAIN (t); } - if (t) + if (t && t != void_list_node) return TREE_VALUE (t); if (!e->callee) return NULL; Jakub