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:
parent
67fbb7f0fd
commit
ab88f36072
@ -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 ();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
19
gcc/testsuite/gcc.dg/analyzer/pr98628.c
Normal file
19
gcc/testsuite/gcc.dg/analyzer/pr98628.c
Normal file
@ -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++ = ' ';
|
||||
}
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user