]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
ipa-prop: Fix ipa_get_callee_param_type for calls with argument type mismatches
authorJakub Jelinek <jakub@redhat.com>
Wed, 10 May 2023 11:20:39 +0000 (13:20 +0200)
committerJakub Jelinek <jakub@redhat.com>
Wed, 10 May 2023 11:20:39 +0000 (13:20 +0200)
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.

2023-05-10  Jakub Jelinek  <jakub@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

index 0f3cb3dd9f9bf8e2c3c2786acc5f10928a841513..d7d70e5ec68a4aef0939e74e6722094e998cf892 100644 (file)
@@ -2147,7 +2147,7 @@ ipa_get_callee_param_type (struct cgraph_edge *e, int i)
         break;
       t = TREE_CHAIN (t);
     }
-  if (t)
+  if (t && t != void_list_node)
     return TREE_VALUE (t);
   if (!e->callee)
     return NULL;