analyzer: fix ICE merging models containing label pointers (PR 93546)
authorDavid Malcolm <dmalcolm@redhat.com>
Mon, 3 Feb 2020 13:30:54 +0000 (08:30 -0500)
committerDavid Malcolm <dmalcolm@redhat.com>
Mon, 3 Feb 2020 19:25:39 +0000 (14:25 -0500)
commit5e10b9a28be9061b9b0c4aa3cfabe6d478e444e0
treedd74ee22c20285a36ad3bfc616203215aecf9563
parent287ccd3bd6b92f11ec90c52ffccb764aacfadb89
analyzer: fix ICE merging models containing label pointers (PR 93546)

PR analyzer/93546 reports an ICE within region_model::add_region_for_type
when merging two region_models each containing a label pointer.  The
two labels are stored as pointers to symbolic_regions, but these regions
were created with NULL type, leading to an assertion failure when a
merged copy is created.

The labels themselves have void (but not NULL) type.

This patch updates make_region_for_type to use the type of the decl when
creating such regions, rather than implicitly setting the region's type
to NULL, fixing the ICE.

gcc/analyzer/ChangeLog:
PR analyzer/93546
* region-model.cc (region_model::on_call_pre): Update for new
param of symbolic_region ctor.
(region_model::deref_rvalue): Likewise.
(region_model::add_new_malloc_region): Likewise.
(make_region_for_type): Likewise, preserving type.
* region-model.h (symbolic_region::symbolic_region): Add "type"
param and pass it to base class ctor.

gcc/testsuite/ChangeLog:
PR analyzer/93546
* gcc.dg/analyzer/pr93546.c: New test.
gcc/analyzer/ChangeLog
gcc/analyzer/region-model.cc
gcc/analyzer/region-model.h
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/analyzer/pr93546.c [new file with mode: 0644]