2
0
mirror of git://gcc.gnu.org/git/gcc.git synced 2025-04-24 19:21:12 +08:00

analyzer: fix ICE merging dereferencing unknown ptrs [PR98628]

gcc/analyzer/ChangeLog:
	PR analyzer/98628
	* store.cc (binding_cluster::make_unknown_relative_to): Don't mark
	dereferenced unknown pointers as having escaped.

gcc/testsuite/ChangeLog:
	PR analyzer/98628
	* gcc.dg/analyzer/pr98628.c: New test.
This commit is contained in:
David Malcolm 2021-01-11 20:23:41 -05:00
parent 67fbb7f0fd
commit ab88f36072
2 changed files with 24 additions and 2 deletions
gcc
analyzer
testsuite/gcc.dg/analyzer

@ -1323,8 +1323,11 @@ binding_cluster::make_unknown_relative_to (const binding_cluster *other,
{
const region *base_reg
= region_sval->get_pointee ()->get_base_region ();
binding_cluster *c = out_store->get_or_create_cluster (base_reg);
c->mark_as_escaped ();
if (!base_reg->symbolic_for_unknown_ptr_p ())
{
binding_cluster *c = out_store->get_or_create_cluster (base_reg);
c->mark_as_escaped ();
}
}
}
}

@ -0,0 +1,19 @@
/* { dg-additional-options "-O1" } */
void foo(void *);
struct chanset_t help_subst_chan;
struct chanset_t *help_subst_chan_0_0;
struct chanset_t {
struct chanset_t *next;
char dname[];
};
void help_subst() {
char *writeidx;
for (;; help_subst_chan = *help_subst_chan_0_0) {
foo(help_subst_chan.next->dname);
if (help_subst_chan_0_0) {
writeidx++;
*writeidx++ = ' ';
}
}
}