aboutsummaryrefslogtreecommitdiff
path: root/gcc/analyzer/region-model.h
diff options
context:
space:
mode:
authorDavid Malcolm <dmalcolm@redhat.com>2020-02-03 08:30:54 -0500
committerDavid Malcolm <dmalcolm@redhat.com>2020-02-03 14:25:39 -0500
commit5e10b9a28be9061b9b0c4aa3cfabe6d478e444e0 (patch)
treedd74ee22c20285a36ad3bfc616203215aecf9563 /gcc/analyzer/region-model.h
parent287ccd3bd6b92f11ec90c52ffccb764aacfadb89 (diff)
downloadgcc-5e10b9a28be9061b9b0c4aa3cfabe6d478e444e0.zip
gcc-5e10b9a28be9061b9b0c4aa3cfabe6d478e444e0.tar.gz
gcc-5e10b9a28be9061b9b0c4aa3cfabe6d478e444e0.tar.bz2
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.
Diffstat (limited to 'gcc/analyzer/region-model.h')
-rw-r--r--gcc/analyzer/region-model.h4
1 files changed, 2 insertions, 2 deletions
diff --git a/gcc/analyzer/region-model.h b/gcc/analyzer/region-model.h
index 70e3eb4..7768e45 100644
--- a/gcc/analyzer/region-model.h
+++ b/gcc/analyzer/region-model.h
@@ -1606,8 +1606,8 @@ namespace ana {
class symbolic_region : public region
{
public:
- symbolic_region (region_id parent_rid, bool possibly_null)
- : region (parent_rid, svalue_id::null (), NULL_TREE),
+ symbolic_region (region_id parent_rid, tree type, bool possibly_null)
+ : region (parent_rid, svalue_id::null (), type),
m_possibly_null (possibly_null)
{}
symbolic_region (const symbolic_region &other);