diff options
author | David Malcolm <dmalcolm@redhat.com> | 2020-01-09 10:12:59 -0500 |
---|---|---|
committer | David Malcolm <dmalcolm@redhat.com> | 2020-01-14 20:58:19 -0500 |
commit | 32077b693df8e3ed0424031a322df23822bf2f7e (patch) | |
tree | 1dc1c79a166e7758871acc06b3586ed4c2e30979 | |
parent | 7fb3669edb4aa3c8313ddf8b914b86a1623e0954 (diff) | |
download | gcc-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/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/analyzer/region-model.cc | 2 | ||||
-rw-r--r-- | gcc/analyzer/region-model.h | 2 |
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) |