diff options
author | David Malcolm <dmalcolm@redhat.com> | 2020-02-03 08:30:54 -0500 |
---|---|---|
committer | David Malcolm <dmalcolm@redhat.com> | 2020-02-03 14:25:39 -0500 |
commit | 5e10b9a28be9061b9b0c4aa3cfabe6d478e444e0 (patch) | |
tree | dd74ee22c20285a36ad3bfc616203215aecf9563 /gcc/analyzer/region-model.h | |
parent | 287ccd3bd6b92f11ec90c52ffccb764aacfadb89 (diff) | |
download | gcc-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.h | 4 |
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); |