On Wed, 10 May 2023, Jakub Jelinek wrote: > 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?
OK. Thanks, Richard. > 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 > > -- Richard Biener <rguent...@suse.de> SUSE Software Solutions Germany GmbH, Frankenstrasse 146, 90461 Nuernberg, Germany; GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman; HRB 36809 (AG Nuernberg)