ipa/105166 - avoid modref queries with mismatching types

We should avoid mismatched argument values (integers for pointers)
when doing modref queries.  This is the third place to guard.

2022-04-06  Richard Biener  <rguenther@suse.de>

	PR ipa/105166
	* ipa-modref-tree.cc (modref_access_node::get_ao_ref ): Bail
	out for non-pointer arguments.

	* gcc.dg/torture/pr105166.c: New testcase.
This commit is contained in:
Richard Biener
2022-04-06 10:40:06 +02:00
parent 44fe494017
commit 4be0831512
2 changed files with 12 additions and 1 deletions

View File

@@ -678,7 +678,9 @@ modref_access_node::get_ao_ref (const gcall *stmt, ao_ref *ref) const
{
tree arg;
if (!parm_offset_known || !(arg = get_call_arg (stmt)))
if (!parm_offset_known
|| !(arg = get_call_arg (stmt))
|| !POINTER_TYPE_P (TREE_TYPE (arg)))
return false;
poly_offset_int off = (poly_offset_int)offset
+ ((poly_offset_int)parm_offset << LOG2_BITS_PER_UNIT);

View File

@@ -0,0 +1,9 @@
/* { dg-do compile } */
int bar (foo, a)
int (**foo) ();
int a;
{
(foo)[1] = bar;
foo[1] (1);
}