aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Malcolm <dmalcolm@redhat.com>2020-01-09 10:12:59 -0500
committerDavid Malcolm <dmalcolm@redhat.com>2020-01-14 20:58:19 -0500
commit32077b693df8e3ed0424031a322df23822bf2f7e (patch)
tree1dc1c79a166e7758871acc06b3586ed4c2e30979
parent7fb3669edb4aa3c8313ddf8b914b86a1623e0954 (diff)
downloadgcc-32077b693df8e3ed0424031a322df23822bf2f7e.zip
gcc-32077b693df8e3ed0424031a322df23822bf2f7e.tar.gz
gcc-32077b693df8e3ed0424031a322df23822bf2f7e.tar.bz2
analyzer: fix ICE on METHOD_TYPE (PR 93212)
PR analyzer/93212 reports an ICE when attempting to use -fanalyzer on a C++ source file. That isn't supported yet, but the fix is trivial (handling METHOD_TYPE as well as FUNCTION_TYPE). gcc/analyzer/ChangeLog: PR analyzer/93212 * region-model.cc (make_region_for_type): Use FUNC_OR_METHOD_TYPE_P rather than comparing against FUNCTION_TYPE. * region-model.h (function_region::function_region): Likewise.
-rw-r--r--gcc/analyzer/ChangeLog7
-rw-r--r--gcc/analyzer/region-model.cc2
-rw-r--r--gcc/analyzer/region-model.h2
3 files changed, 9 insertions, 2 deletions
diff --git a/gcc/analyzer/ChangeLog b/gcc/analyzer/ChangeLog
index 7d3b109..340288c 100644
--- a/gcc/analyzer/ChangeLog
+++ b/gcc/analyzer/ChangeLog
@@ -1,5 +1,12 @@
2020-01-14 David Malcolm <dmalcolm@redhat.com>
+ PR analyzer/93212
+ * region-model.cc (make_region_for_type): Use
+ FUNC_OR_METHOD_TYPE_P rather than comparing against FUNCTION_TYPE.
+ * region-model.h (function_region::function_region): Likewise.
+
+2020-01-14 David Malcolm <dmalcolm@redhat.com>
+
* program-state.cc (sm_state_map::clone_with_remapping): Copy
m_global_state.
(selftest::test_program_state_merging_2): New selftest.
diff --git a/gcc/analyzer/region-model.cc b/gcc/analyzer/region-model.cc
index b492222d..5c39be4 100644
--- a/gcc/analyzer/region-model.cc
+++ b/gcc/analyzer/region-model.cc
@@ -5963,7 +5963,7 @@ make_region_for_type (region_id parent_rid, tree type)
if (TREE_CODE (type) == UNION_TYPE)
return new union_region (parent_rid, type);
- if (TREE_CODE (type) == FUNCTION_TYPE)
+ if (FUNC_OR_METHOD_TYPE_P (type))
return new function_region (parent_rid, type);
/* If we have a void *, make a new symbolic region. */
diff --git a/gcc/analyzer/region-model.h b/gcc/analyzer/region-model.h
index 2d0c061..eea808e 100644
--- a/gcc/analyzer/region-model.h
+++ b/gcc/analyzer/region-model.h
@@ -1202,7 +1202,7 @@ public:
function_region (region_id parent_rid, tree type)
: map_region (parent_rid, type)
{
- gcc_assert (TREE_CODE (type) == FUNCTION_TYPE);
+ gcc_assert (FUNC_OR_METHOD_TYPE_P (type));
}
function_region (const function_region &other)
: map_region (other)