diff options
author | Richard Biener <rguenther@suse.de> | 2022-04-06 10:40:06 +0200 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2022-04-06 12:23:17 +0200 |
commit | 4be08315124281f4e9359bc7e5279a99bdbdd053 (patch) | |
tree | 67323567ec05e2df87286d881a783dc58d33d64c /gcc | |
parent | 44fe49401725055a740ce47e80561b6932b8cd01 (diff) | |
download | gcc-4be08315124281f4e9359bc7e5279a99bdbdd053.zip gcc-4be08315124281f4e9359bc7e5279a99bdbdd053.tar.gz gcc-4be08315124281f4e9359bc7e5279a99bdbdd053.tar.bz2 |
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.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ipa-modref-tree.cc | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/pr105166.c | 9 |
2 files changed, 12 insertions, 1 deletions
diff --git a/gcc/ipa-modref-tree.cc b/gcc/ipa-modref-tree.cc index d0ec2fb..f19af8c 100644 --- a/gcc/ipa-modref-tree.cc +++ b/gcc/ipa-modref-tree.cc @@ -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); diff --git a/gcc/testsuite/gcc.dg/torture/pr105166.c b/gcc/testsuite/gcc.dg/torture/pr105166.c new file mode 100644 index 0000000..60e8b73 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr105166.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ + +int bar (foo, a) + int (**foo) (); + int a; +{ + (foo)[1] = bar; + foo[1] (1); +} |